国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

詳解java裝飾模式(Decorator Pattern)

2019-11-26 14:27:45
字體:
來源:轉載
供稿:網友

一、裝飾器模式(Decorator Pattern)

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

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

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

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

RedShapeDecorator 是實現了ShapeDecorator 的實體類。

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

步驟 1
創建一個接口。

Shape.java

public interface Shape {  void draw();}

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

Rectangle.java

public class Rectangle implements Shape {   @Override  public void draw() {   System.out.println("Shape: Rectangle");  }}

Circle.java

public class Circle implements Shape {   @Override  public void draw() {   System.out.println("Shape: Circle");  }} 

步驟 3
創建實現了 Shape 接口的抽象裝飾類。

ShapeDecorator.java

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

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

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

Circle with normal borderShape: CircleCircle of red borderShape: CircleBorder Color: RedRectangle of red borderShape: RectangleBorder Color: Red

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 全南县| 扎鲁特旗| 全椒县| 岐山县| 靖边县| 平乡县| 荔波县| 井冈山市| 普兰店市| 新郑市| 兴义市| 西乡县| 鄂温| 石林| 库伦旗| 茶陵县| 明光市| 九龙坡区| 宣汉县| 延长县| 锡林浩特市| 海林市| 平塘县| 崇左市| 蒲江县| 崇明县| 绥化市| 临西县| 湛江市| 台前县| 林芝县| 黑水县| 金坛市| 大埔区| 郓城县| 临漳县| 金坛市| 万盛区| 子长县| 紫阳县| 高安市|