裝飾模式

裝飾模式

首先裝飾模式不是代碼,是一種編寫邏輯思想。

適合場景:一個人點餐。碗筷必需品,其他的都可以隨意添加。

他方理解:裝飾模式指的是在不必改變原類文件和使用繼承的情況下,動態地擴展一個對象的功能。它是通過創建一個包裝對象,也就是裝飾來包裹真實的對象。

我的理解:保存最基礎的功能,其他類做出對應補充

具體例子:

  1. 創建一個超類,所有的類都繼承或實現。可以定義成接口類型
package com.dawn.design.decorate;

/**
 * @Auther: dawn
 * @Date: 2020/1/13 11:02
 * @Description: 超類 吃
 */
public abstract class Eat {

	protected void pre() {}

	protected void after(){}
}
  1. 基礎類 和超類進行綁定關係
package com.dawn.design.decorate;

/**
 * @Auther: dawn
 * @Date: 2020/1/13 11:08
 * @Description:
 */
public class BaseEat extends Eat {

	@Override
	protected void pre() {
		System.out.println("第一準備碗筷");
	}

	@Override
	protected void after() {
		System.out.println("運動員正在玩");
	}
}

  1. 最終應用類
package com.dawn.design.decorate;

/**
 * @Auther: dawn
 * @Date: 2020/1/13 11:10
 * @Description: 籃球運動員
 */
public class FatterEat extends Eat{

	Eat eat ;

	public FatterEat(Eat eat) {
		this.eat = eat;
	}

	@Override
	protected void pre() {
		eat.pre();
		doSomething();
	}

	@Override
	protected void after() {
		eat.after();
	}

	void doSomething(){
		System.out.println("胖的,想先吃兩個熱狗先");
	}

}

package com.dawn.design.decorate;

/**
 * @Auther: dawn
 * @Date: 2020/1/13 11:25
 * @Description:
 */
public class ThinEat extends Eat {

	Eat eat;

	public ThinEat(Eat eat) {
		this.eat = eat;
	}

	@Override
	protected void pre() {
		eat.pre();
		thinDoing();
	}

	@Override
	protected void after() {
		eat.after();
	}

	void thinDoing(){
		System.out.println("苗條的人 想安靜的等待別人點單");
	}

}

  1. 測試類
package com.dawn.design.decorate;

/**
 * @Auther: dawn
 * @Date: 2020/1/13 11:12
 * @Description:
 */
public class TestEat {

	public static void main(String[] args) {

		/**
		 * 第一準備碗筷
		 * 胖的,想先吃兩個熱狗先
		 */
		Eat eat = new FatterEat(new BaseEat());
		eat.pre();

		/**
		 * 第一準備碗筷
		 * 苗條的人 想安靜的等待別人點單
		 */
		Eat e = new ThinEat(new BaseEat());
		e.pre();

		/**
		 * 第一準備碗筷
		 * 胖的,想先吃兩個熱狗先
		 * 苗條的人 想安靜的等待別人點單
		 */
		Eat e2 = new ThinEat(new FatterEat(new BaseEat()));
		e2.pre();
	}
}

總結

優點: 方便方法的擴展,不想extends增加代碼冗餘量。可以針對不同的個體創建不同的行爲數據
缺點: 每次使用會創建許多對象。過多的小類會讓我們的系統變得很複雜。對內存考驗極大。

結束語

裝飾器模式有利有弊(更多的是利大於弊),我們可以好好思考裝飾者模式應用場景,然後進一步掌握這種設計思想。

發佈了8 篇原創文章 · 獲贊 0 · 訪問量 2040
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章