26.裝飾模式(decorator pattern)
1.我理解的模式(是面向抽象程式設計的具體實踐已期符合開閉原則,提高程式碼的可維護性和可複用性)
2.設計模式分類
建立型模式,共五種:工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式。
結構型模式,共七種:介面卡模式、裝飾器模式、代理模式、外觀模式、橋接模式、組合模式、享元模式。
行為型模式,共十一種:策略模式、模板方法模式、觀察者模式、迭代子模式、責任鏈模式、命令模式、備忘錄模式、狀態模式、訪問者模式、中介者模式、直譯器模式。
3.裝飾模式的結構
4.客戶端怎麼使用?鏈式呼叫
5.什麼情況下使用?
(1)擴充套件一個類的功能
(2)動態地給一個lei增加功能
(3)會涉及到附加功能的排列組合
6.為什麼不用繼承?
(1)繼承關係是編譯時確定的,不夠靈活
(2)繼承在處理涉及到附加功能的排列組合的情況時,將會產生非常多的類。
看例子:
(1)YaSe--Hero--Skills-SkillQ-SkillW-SkillE-SkillR
(2)Java-io
7.透明的裝飾模式和半透明的裝飾模式
透明的裝飾模式:
Component c = new ConcreteComponent();
Component c1 = new ConcreteDecorator(c);
c1.method();
不透明的裝飾模式:
Component c = new ConcreteComponent();
ConcreteDecorator c1 = new ConcreteDecorator(c);
c1.newMethod();
8.使用不透明的裝飾模式實現一個可以搜尋的字元流。【看例子SearchReader】
9.模式的簡化
注意幾點:
(1)一個裝飾類的介面必須與被裝飾類的介面相容,即ConcreteDecorator類必須繼承自一個共同的父類Component
(2)不要把太多的邏輯放到Component類中。
(3)如果只有一個ConcreteComponent,可以沒有Component。
(4)如果ConcreteDecorator類少於3個,可以省略Decorator
10.裝飾模式的缺點
產生很多相似的物件,容易出錯。