裝飾器模式學習筆記

2021-06-28 21:04:41 字數 2161 閱讀 3736

參考鏈結1:

參考鏈結2:

裝飾器模式:在不改變原類和不生成子類的情況下,動態為物件新增額外的職責。其比繼承更靈活、更具彈性。

不改變原類擴充套件功能,符合開閉原則(對修改關閉,對新增開放);

不通過子類擴充套件功能,可以讓類設計更靈活。因為繼承實現子類行為,編譯是靜態的;而用組合擴充套件功能,則可以在程式執行時動態擴充套件。

在客戶端中對concretecomponent進行裝飾的語句就為:

abstractdecorator decorator = newconcretedecorator2(new concretecomponent());

decorator例項介面與被裝飾者介面(operator())保持一致,但客戶端通過裝飾器示例呼叫operator()方法時,功能已可以被動態增加。

1)  抽象角色(icomponent):給出乙個抽象介面,以規範準備接受附加職能的物件。

2)  具體角色(concretecomponent):被裝飾者,其實現介面與抽象角色保持一致。

3)  抽象裝飾角色(abstractdecorator):裝飾器,實現並聚合了抽象角色。實現抽象角色是為了裝飾者與被裝飾者保持相同的對外介面;聚合了乙個抽象角色,是為了通過此角色,在執行時動態呼叫某一具體角色。

4)  具體裝飾角色(concretedecorator):需要擴充套件功能的動態實現,具體的裝飾器。

2) io操作之一:bufferedinputstream對fileinputstream裝飾:

bufferedinputstream buf = new bufferedinputstream(newfileinputstream(「filepath」));

類圖如下:filterinputstream相當於抽象裝飾器角色,fileinputstream是被裝飾的角色,inputstream抽象類是裝飾器與被裝飾器共同的規範,bufferedinputstream則是具體的裝飾實現。換句話說,這裡的bufferedinputstream是對fileinputstream裝飾了緩衝區功能,若實際需求中你對fileinputstream現有功能不滿,你可以自定filterinputstream的子類,實現自己的裝飾器。

舉例實現三個裝飾器,每個擴充套件乙個功能,在客戶端呼叫裝飾器時,對其進行了三次裝飾,那麼裝飾器示例三個功能都具備。

1)  抽象角色:

public inte***ce isource
2)  具體角色:

public class sourceimpl implements isource 

}

3)  抽象裝飾角色:

public abstract class abstractdecoratorsource implements isource           

public void operatrion()

}

4)  具體裝飾角色,a、b、c:

public class decoratorsourcea extends abstractdecoratorsource 

@override

public void operatrion()

}public class decoratorsourceb extends abstractdecoratorsource

@override

public void operatrion()

}public class decoratorsourcec extends abstractdecoratorsource

@override

public void operatrion()

}

5)  客戶端呼叫測試

public class test 

}

6)  輸出結果:

設計模式學習筆記 裝飾器模式

比如人的行為類,剛剛開始的時候,就能上得了廳堂,下得了廚房。但隨著年歲的增長,每個人歷經了世事,變得不僅是上得了廳堂,下得了廚房。有些人能鬥得過流氓,有些人修得了電腦。那麼如果用 表示這些增加了特殊行為的人。inte ce iperson class person implements iperso...

裝飾器模式筆記

定義 裝飾者模式 動態的將責任附加到物件上。若要擴充套件功能,裝飾者提供了比繼承更有彈性的替代方案。功能 除了繼承,裝飾者模式可以更彈性的擴充套件功能。優點 良好的設計原則,類對擴充套件開放,對修改關閉。裝飾者類可動態的用於裝飾元件。可以用無數個裝飾類包裝乙個元件。缺點 會導致設計中出現很多小物件,...

裝飾模式學習筆記

裝飾模式的定義 動態地給乙個物件新增額外的職責,就新增功能來說,裝飾模式比生成子類更加靈活。這段話比較抽象,自己根據裝飾模式實踐了一下,有了一些小小的領悟分享一下。我們最開始有一抽象類,比如說是人,它有兩個子類分別是學生和老師,並且有一些共有的屬性放在抽象類 人 中,有一些獨有的屬性放在各自的學生類...