設計模式之——裝飾者模式


裝飾者模式

一、什么是裝飾者?

裝飾者模式允許向現有的對象添加新的功能,同時不改變其結構。

屬於結構型模式。

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

二、裝飾者的介紹

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 ");
	}

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM