1. 程式人生 > 其它 >Java設計模式——裝飾器模式(Decorator)

Java設計模式——裝飾器模式(Decorator)

今天上課講了java設計模式中的裝飾器模式——Decorator,由於早上起的很早,肚子也很餓,知識點本身也晦澀難懂,聽的雲裡霧裡的,所以在課下對這塊的知識做出一些總結。

定義

裝飾器模式又名包裝(Wrapper)模式。裝飾器模式以對客戶端透明的方式拓展物件的功能,是繼承關係的一種替代方案。

目的:為物件增加不同側面的特性

 程式碼示例

1.基礎功能

 2.用於decorator的基礎類

 3.增加了新特性

 4.客戶端程式碼

通過上面的程式碼演示,可以清楚的看到,使用裝飾器模式可以很靈活的對既有的基礎元件物件持有的功能進行補充和擴充套件,可以根據自身的業務訴求進行自由搭配

分析

1.理想的裝飾器模式的裝飾者介面跟元件介面應該保持一模一樣,這樣每次傳入一個元件進去,都只對元件介面的各個方法增加功能,返回依舊由元件介面接收,這樣呼叫同一個物件的同一個方法會有不同的實現,呼叫者完全不必要知道具體呼叫的是哪個物件,這個也稱之為透明裝飾器;


2.如果裝飾者介面跟元件介面不一致,裝飾者介面對元件介面方法進行了擴增,也是增加了新功能,但是如果還是用原元件介面來接收的話,新增的方法需要向下轉型才能使用,這就違背了裝飾器的初衷,但是元件介面中的方法仍然可以正常使用,因此這種可稱之為半透明裝飾器;


3.如果只是需要將原來物件或者類轉換成另外一個我們需要的物件介面,不增加新功能,這種就是介面卡;


4.簡單的來理解的話,裝飾器用來新加功能,介面卡只是用來轉換功能;

優缺點

裝飾器設計模式,優點:

1.裝飾模式與繼承關係的目的都是要擴充套件原有物件的功能,但是裝飾器模式比繼承增加了更多的靈活性

2.使用不同的具體裝飾類以及這些裝飾類的排列組合,可以創造出更多的不同行為的組合,原有的程式碼無需改變,符合“開閉”原則

3.裝飾模式允許系統動態的決定貼上一個需要的裝飾,或者除掉一個不需要的裝飾。繼承關係則不同,繼承關係是靜態的,他在系統執行前就已經決定了。


缺點:

裝飾器模式添加了許多子類,過多使用會使程式變得很複雜
增加了系統的複雜程度,加大了使用者的學習成本和理解難度

 參考部落格

https://blog.csdn.net/zhangcongyi420/article/details/113096375?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0-113096375-blog-90288832.pc_relevant_default&spm=1001.2101.3001.4242.1&utm_relevant_index=3

https://blog.csdn.net/qq_30325833/article/details/90288832?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-90288832-blog-45827851.pc_relevant_antiscanv2&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-90288832-blog-45827851.pc_relevant_antiscanv2&utm_relevant_index=2