裝飾者模式
一、什么是裝飾者?
裝飾者模式允許向現有的對象添加新的功能,同時不改變其結構。
屬於結構型模式。
創建了一個裝飾類,用來包裝原有的類,並在保持方法簽名完整性的前提下,提供了額外的功能。
二、裝飾者的介紹
1. 意圖:
動態地給一個對象添加一些額外的職責。
2. 主要解決:
一般情況下,我們想擴展一個類經常使用繼承的方式實現,由於繼承為類引入了靜態特征,並且隨着擴展功能的增多,子類會膨脹。
3. 何時使用:
在不想增加很多子類的情況下擴展類
4. 使用場景:
(1) 擴展一個類的功能;(2) 動態增加功能,動態撤銷。
三、code display
現在畫圖形,可以畫兩種圖形:1. 圓形; 2. 正方形
//接口類
public interface Shape {
void draw();
}
//圓形
public class Circle implements Shape{
@Override
public void draw() {
System.out.println("Shape: Circle");
}
}
//正方形
public class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("Shape: Rectangle " );
}
}
現要求,畫出來的圖形要能夠邊框要能夠有顏色
首先創建一個裝飾者類:
//裝飾者類
public abstract class ShapeDecorator implements Shape {
public Shape decoratedShape;
public ShapeDecorator(Shape decoratedShape){
this.decoratedShape = decoratedShape;
}
//裝飾者類調用接口方法
public void draw(){
decoratedShape.draw();
}
}
//紅色裝飾者子類
public class RedShapeDecorator extends ShapeDecorator{
/**
* @param decoratedShape
*/
public RedShapeDecorator(Shape decoratedShape) {
super(decoratedShape);
}
@Override
public void draw() {
decoratedShape.draw();
setRedBorder(decoratedShape);
}
public void setRedBorder(Shape decoratedShape){
System.out.println(" Border Color: Red ");
}
}