意圖:
動態地給乙個物件新增一些額外的職責.就增加功能來說,decorator模式相對於生成子類更為靈活
適用性:
1.在不影響其他物件的情況下,以動態,透明的方式給單個物件新增職責.
2.處理那些可以撤銷的職責.
3.當不能採用生成子類的方式進行擴充時.
效果:1.比靜態繼承更靈活
2.避免在層次結構高層的類有太多的特性
3.decorator與它的component不一樣
4.有許多小物件
**實現:
package com.git.books.b_design_patterns.i_decorator;
/** *
* @description: 裝飾模式 頂級定義類 對乙個人進行裝飾(穿衣)
* @author: songqinghu
* @date: 2023年3月4日 下午3:24:43
* version:1.0
*/public abstract class peoplecomponent
public abstract void show();
}
package com.git.books.b_design_patterns.i_decorator;
/** *
* @description: 人
* @author: songqinghu
* @date: 2023年3月4日 下午3:25:53
* version:1.0
*/public class people
public void setname(string name)
public int getage()
public void setage(int age)
public gender getgender()
public void setgender(gender gender)
@override
public string tostring()
}
package com.git.books.b_design_patterns.i_decorator;
/** * @description: 被裝飾的例項類
* @author: songqinghu
* @date: 2023年3月4日 下午3:31:01
* version:1.0
*/public class peopleconcrete extends peoplecomponent
@override
public void show()
}
package com.git.books.b_design_patterns.i_decorator;
/** *
* @description: 裝飾類介面定義類
* @author: songqinghu
* @date: 2023年3月4日 下午3:34:39
* version:1.0
*/public abstract class peopledecorator extends peoplecomponent
//簡單定義裝飾行為
public abstract void action();
}
package com.git.books.b_design_patterns.i_decorator;
/** *
* @description: 包裝 使之穿上衣服
* @author: songqinghu
* @date: 2023年3月4日 下午3:47:21
* version:1.0
*/public class clothesdecorator extends peopledecorator
@override
public void action()
@override
public void show()
}
package com.git.books.b_design_patterns.i_decorator;
/** * @description: 包裝 使之穿上褲子
* @author: songqinghu
* @date: 2023年3月4日 下午3:47:51
* version:1.0
*/public class pantsdecorator extends peopledecorator
@override
public void action()
@override
public void show()
}
package com.git.books.b_design_patterns.i_decorator;
/** * @description: 包裝使之收穫讚美
* @author: songqinghu
* @date: 2023年3月4日 下午3:49:10
* version:1.0
*/public class praisedecorator extends peopledecorator
@override
public void action() else
}@override
public void show()
}
package com.git.books.b_design_patterns.i_decorator;
public enum gender
package com.git.books.b_design_patterns.i_decorator;
/** *
* @description: 裝飾模式測試類
* @author: songqinghu
* @date: 2023年3月4日 下午3:53:58
* version:1.0
*/public class thedecoratortest
}
執行結果:
coco put on a beautiful dress
coco put on a beautiful pants
my name : coco, age :19, gender : woman
this woman is charming!
結構圖:
重點:理解如何進行包裝.
參考:《設計模式》
<
設計模式之 裝飾者模式
一 裝飾者模式 裝飾者模式又稱為包裝模式。動態地給乙個物件增加新的職責。若要擴充套件功能,裝飾者提供了比繼承更有彈性的替代方案。裝飾者模式顧名思義就是對乙個物件進行裝飾,具體怎樣裝飾呢?那就是給這個物件不斷的增加職責方法。給乙個物件增加方法不簡單啊,用繼承或者直接在物件的類中增加方法。如果我們要對自...
設計模式之裝飾者模式
此模式動態將職責附加到物件上,若要擴充套件功能,裝飾者提供了比繼承更具彈性的代替方案,以一圖一概括。要點1 裝飾者和被裝飾物件有相同的超型別。2 可以用乙個或多個裝飾者包裝乙個物件。3 裝飾者可以在所委託被裝飾者的行為之前或之後,加上自己的行為,以達到特定的目的。4 物件可以在任何時候被裝飾,所以可...
設計模式之裝飾者模式
public abstract class beverage 返回當前飲品的 public abstract double cost 為了讓condiment decorator 調料裝飾者 能夠取代beverage,所以將它擴充套件至beverage類 public abstract class ...