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

服務器之家:專注于服務器技術及軟件下載分享
分類導航

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

服務器之家 - 編程語言 - JAVA教程 - 詳解java裝飾模式(Decorator Pattern)

詳解java裝飾模式(Decorator Pattern)

2020-04-15 11:32碼農教程 JAVA教程

這篇文章主要為大家詳細介紹了java裝飾模式Decorator Pattern,這種類型的設計模式屬于結構型模式,它是作為現有的類的一個包裝,對裝飾器模式感興趣的小伙伴們可以參考一下

一、裝飾器模式(Decorator Pattern)

允許向一個現有的對象添加新的功能,同時又不改變其結構。這種類型的設計模式屬于結構型模式,它是作為現有的類的一個包裝。

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

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

二、實現
我們將創建一個 Shape 接口和實現了 Shape 接口的實體類。然后我們創建一個實現了 Shape 接口的抽象裝飾類ShapeDecorator,并把 Shape 對象作為它的實例變量。

RedShapeDecorator 是實現了ShapeDecorator 的實體類。

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

步驟 1
創建一個接口。

Shape.java

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

步驟 2
創建實現接口的實體類。

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
創建實現了 Shape 接口的抽象裝飾類。

ShapeDecorator.java

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

步驟 4
創建擴展自 ShapeDecorator 類的實體裝飾類。

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
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
驗證輸出。

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

希望本文所述對大家學習java程序設計有所幫助。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲不卡视频在线 | 脱女学小内内摸出水网站免费 | 国产精品毛片va一区二区三区 | 久久亚洲精品中文字幕60分钟 | 免费抽搐一进一出印度 | 久久三级视频 | 久久AV国产麻豆HD真实乱 | 国产欧美日韩图片一区二区 | 国产亚洲精品一区久久 | 四虎影院在线免费观看视频 | 91制片厂果冻传媒杨柳作品 | 高清在线免费 | 成年人在线视频观看 | 91噜噜噜在线观看 | 日韩天堂网 | 欧美成人免费草草影院视频 | 热伊人99re久久精品最新地 | 成人精品第一区二区三区 | 国内精品91东航翘臀女神在线 | h版在线观看 | 亚洲精品综合一区二区 | 性色AV乱码一区二区三区视频 | 沉香如屑西瓜视频免费观看完整版 | 四虎新网站 | 免费观看国产大片资源视频 | 久久精品国产亚洲AV热无遮挡 | 日韩精品一区二区三区毛片 | 性欧美xxxxx护士另类 | 免费大秀视频在线播放 | 私人影院在线免费观看 | dasd817黑人在线播放 | 美女扒开屁股让我桶免费 | 丝瓜污污视频 | 亚洲国产五月综合网 | 天美传媒传媒免费观看 | 男女一级簧色带 | 日本一区视频在线 | 好吊操这里有精品 | 国内久久婷婷综合欲色啪 | 韩国美女主播在线 | 草久网 |