一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務(wù)器之家 - 編程語言 - JAVA教程 - java 裝飾模式(Decorator Pattern)詳解及實(shí)例代碼

java 裝飾模式(Decorator Pattern)詳解及實(shí)例代碼

2020-06-21 15:07Java教程網(wǎng) JAVA教程

裝飾器模式(Decorator Pattern)允許向一個(gè)現(xiàn)有的對象添加新的功能,同時(shí)又不改變其結(jié)構(gòu)。這種類型的設(shè)計(jì)模式屬于結(jié)構(gòu)型模式,它是作為現(xiàn)有的類的一個(gè)包裝

裝飾器模式(Decorator Pattern)允許向一個(gè)現(xiàn)有的對象添加新的功能,同時(shí)又不改變其結(jié)構(gòu)。這種類型的設(shè)計(jì)模式屬于結(jié)構(gòu)型模式,它是作為現(xiàn)有的類的一個(gè)包裝。

這種模式創(chuàng)建了一個(gè)裝飾類,用來包裝原有的類,并在保持類方法簽名完整性的前提下,提供了額外的功能。

我們通過下面的實(shí)例來演示裝飾器模式的使用。其中,我們將把一個(gè)形狀裝飾上不同的顏色,同時(shí)又不改變形狀類。

實(shí)現(xiàn)

我們將創(chuàng)建一個(gè) Shape 接口和實(shí)現(xiàn)了 Shape 接口的實(shí)體類。然后我們創(chuàng)建一個(gè)實(shí)現(xiàn)了 Shape 接口的抽象裝飾類ShapeDecorator,并把 Shape 對象作為它的實(shí)例變量。

RedShapeDecorator 是實(shí)現(xiàn)了 ShapeDecorator 的實(shí)體類。

DecoratorPatternDemo,我們的演示類使用 RedShapeDecorator 來裝飾 Shape 對象。

 步驟 1

創(chuàng)建一個(gè)接口。

Shape.java

?
1
2
3
4
public interface Shape {
  void draw();
}

步驟 2

創(chuàng)建實(shí)現(xiàn)接口的實(shí)體類。

Rectangle.java

?
1
2
3
4
5
6
7
public class Rectangle implements Shape {
 
  @Override
  public void draw() {
   System.out.println("Shape: Rectangle");
  }
}

Circle.java

?
1
2
3
4
5
6
7
public class Circle implements Shape {
 
  @Override
  public void draw() {
   System.out.println("Shape: Circle");
  }
}

 步驟 3

創(chuàng)建實(shí)現(xiàn)了 Shape 接口的抽象裝飾類。

ShapeDecorator.java

?
1
2
3
4
5
6
7
8
9
10
11
12
public abstract class ShapeDecorator implements Shape {
  protected Shape decoratedShape;
 
  public ShapeDecorator(Shape decoratedShape){
   this.decoratedShape = decoratedShape;
  }
 
  public void draw(){
   decoratedShape.draw();
  
}

步驟 4

創(chuàng)建擴(kuò)展自 ShapeDecorator 類的實(shí)體裝飾類。

RedShapeDecorator.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class RedShapeDecorator extends ShapeDecorator {
 
  public RedShapeDecorator(Shape decoratedShape) {
   super(decoratedShape);   
  }
 
  @Override
  public void draw() {
   decoratedShape.draw();    
   setRedBorder(decoratedShape);
  }
 
  private void setRedBorder(Shape decoratedShape){
   System.out.println("Border Color: Red");
  }
}

 步驟 5

使用 RedShapeDecorator 來裝飾 Shape 對象。

DecoratorPatternDemo.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class DecoratorPatternDemo {
  public static void main(String[] args) {
 
   Shape circle = new Circle();
 
   Shape redCircle = new RedShapeDecorator(new Circle());
 
   Shape redRectangle = new RedShapeDecorator(new Rectangle());
   System.out.println("Circle with normal border");
   circle.draw();
 
   System.out.println("\nCircle of red border");
   redCircle.draw();
 
   System.out.println("\nRectangle of red border");
   redRectangle.draw();
  }
}

步驟 6

驗(yàn)證輸出。

?
1
2
3
4
5
6
7
8
9
10
11
Circle with normal border
Shape: Circle
 
Circle of red border
Shape: Circle
Border Color: Red
 
Rectangle of red border
Shape: Rectangle
Border Color: Red

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: free哆拍拍免费永久视频 | 99在线观看视频免费 | 国产裸舞福利资源在线视频 | 成年视频在线观看免费 | 日本国产高清色www视频在线 | 日本不卡一区二区三区在线观看 | 强波多野结衣女教师 | 波多野结衣伦理在线观看 | 久久re这里精品在线视频7 | 亚洲国产精品高清在线 | 天作谜案免费完整版在线观看 | 日韩在线1 | 国产精品嫩草影院一二三区 | 欧美亚洲韩国 | 男人看片网址 | 国产亚洲视频网站 | 欧美一区a | 亚洲精品无码不卡在线观看 | 午夜福利体检 | 毛片免费全部免费观看 | 热99re久久精品精品免费 | 四虎影院在线免费播放 | 日本人成在线视频免费播放 | 四虎影视在线影院在线观看 | 亚洲精品αv一区二区三区 亚洲精品91大神在线观看 | 无人区在线观看免费完整版免费 | 女人叉开腿让男人捅 | 美女把小内内脱个精光打屁屁 | 好姑娘在线观看完整版免费 | 精品人人做人人爽久久久 | 四虎影视色费永久在线观看 | 好大好硬快点好爽公 | 成人猫咪maomiav永久网址 | 精品免费视在线视频观看 | 欧美人成绝费网站色www吃脚 | 日本一道本视频 | 欧美高清免费一级在线 | 国产成+人+综合+欧美 亚洲 | 欧美国产日本精品一区二区三区 | 亚洲国产在线视频精品 | 羞羞漫画免费漫画页面在线看漫画秋蝉 |