裝飾模式是對類的組合進行的擴充。
比如現在有個門,現在有一些額外功能,比如"新增鎖" 「貼春聯」 「門眼」 「門框全包」 等功能,這些功能可以單獨存在,也可以兩兩組合等隨意組合。
怎麼實現這樣的"門"呢.
繼承:比如有「貼春聯」 「門眼」 就新增乙個新類,這樣如果需要其他的功能就需要無窮多的子類。
組合:加強版組合—裝飾模式
功能可以隨意定義,隨意組合,只需要一些特定的裝飾類。
特點:抽象裝飾角色和要裝飾的類(具體角色)繼承同樣的介面(抽象角色)
1. 抽象角色
package com.hfview.designmode.decorator;
/** * 抽象的介面
* */
public inte***ce people
2.具體角色
package com.hfview.designmode.decorator;
/** *
*具體的物件
*/public class lilei implements people
}
3.抽象裝飾者
package com.hfview.designmode.decorator;
/** *
*抽象裝飾著類
*實現抽象角色介面
*/public class decorator implements people
public void wear()
}
4.具體裝飾類1
package com.hfview.designmode.decorator;
/** * 具體裝飾者---穿襯衫
* @author administrator
* */
class decoratorshirt extends decorator
public void wear()
}
5.具體裝飾類2
package com.hfview.designmode.decorator;
/** *
*具體的裝飾者類,負責給增加附加的操作:穿西服
*/class decoratorsuit extends decorator
public void wear()
}
5.具體裝飾類3
package com.hfview.designmode.decorator;
/** *
*具體的裝飾者類,負責給增加附加的操作:穿鞋子
*/class decoratorshoes extends decorator
public void wear()
}
呼叫例項
package com.hfview.designmode.decorator;
/** *
*裝飾模式有點像靜態**,基本上就是在原來方法的基礎上增加一些額外功能
*這個其實也能用繼承來實現,但是如果用繼承那麼將會產生無窮盡的子類,遠遠不如
*裝飾靈活好用。
*/public class main
}
起床了,要床衣服!!
穿個襯衫
穿個西服
鞋子
裝飾模式(結構型模式)
裝飾模式是一種動態的給類中新增新行為的設計模式,裝飾模式比生成子類更為靈活,可以給某個物件而不是整個類新增一些功能。值得注意的是裝飾模式的裝飾類也繼承介面類,同時他也有介面類的指標指向他需要裝飾的具體類。外表看著像is a的關係,實際也是has a的關係。實際應用中裝飾類可以同時裝飾幾個具體類。可以...
結構型模式 裝飾模式(decorator)
1 裝飾模式 動態的給乙個物件新增一些額外的職責,就增加功能來說decorator模式相比生成子類更為靈活。要求裝飾物件和被裝飾物件實現同乙個介面,裝飾物件持有被裝飾物件的例項。例項一 public inte ce source public class sourcechild implements...
結構型模式 裝飾器模式
為已有的物件新增新的功能 新增新的方法到物件所屬的類中 使用組合創造新的物件 使用繼承創造子類 組合 繼承 新增新方法 python中我們可以使用內建的裝飾器特性來實現對類,方法的擴充套件,而無需使用繼承。用裝飾器來實現程式中的橫切關注點 應用中通用的部件,可以在程式中被廣泛使用的 推薦使用func...