java 裝飾模式(Decorator Pattern)詳解及例項程式碼

NO IMAGE

裝飾器模式(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 border
Shape: Circle
Circle of red border
Shape: Circle
Border Color: Red
Rectangle of red border
Shape: Rectangle
Border Color: Red

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

您可能感興趣的文章:

java 裝飾模式(Decorator Pattern)詳解詳解java裝飾模式(Decorator Pattern)Java設計模式之裝飾模式(Decorator模式)介紹java設計模式之裝飾模式詳細介紹java 中設計模式(裝飾設計模式)的例項詳解