1. 程式人生 > >26.裝飾模式(decorator pattern)

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.裝飾模式的缺點

產生很多相似的物件,容易出錯。