裝飾器模式(decorator pattern)允許向乙個現有的物件新增新的功能,同時又不改變其結構。這種型別的設計模式屬於結構型模式,它是作為現有的類的乙個包裝。這種模式建立了乙個裝飾類,用來包裝原有的類,並在保持類方法簽名完整性的前提下,提供了額外的功能。
意圖:動態地給乙個物件新增一些額外的職責。就增加功能來說,裝飾器模式相比生成子類更為靈活。
主要解決:
一般的,我們為了擴充套件乙個類經常使用繼承方式實現,由於繼承為類引入靜態特徵,並且隨著擴充套件功能的增多,子類會很膨脹。何時使用:在不想增加很多子類的情況下擴充套件類。
如何解決:
將具體功能職責劃分,同時繼承裝飾者模式。
關鍵**:
1、component 類充當抽象角色,不應該具體實現。
2、修飾類引用和繼承 component 類,具體擴充套件類重寫父類方法。
用生活中熟悉的奶茶的例子來闡述裝飾模式
package com.it.decorator;
/* * 被裝飾的原始抽象類或介面
* 抽象的奶茶類
*/public abstract class abstractmilktea
package com.it.decorator;
/* * 抽象奶茶類的具體具體實現類
*/public class milktea extends abstractmilktea
@override
public double getprice()
}
要點概述:package com.it.decorator;
/* * 裝飾者模式
* 抽象的裝飾者繼承了被裝飾的原始抽象類
*/public abstract class abstractdecorator extends abstractmilktea
public abstractdecorator(abstractmilktea abstractmilktea)
//重寫父類的方法
@override
public double getprice()
@override
public string descript()
}
要點概述:package com.it.decorator;
/* * 抽象裝飾者的子類
* 奶茶加糖
*/public class sugardecorator extends abstractdecorator
public sugardecorator(abstractmilktea abstractmilktea)
@override
//裝飾行為
public string descript()
@override
//加糖後的**
public double getprice()
}
要點概述:package com.it.decorator;
/* * 抽象裝飾者的子類
* 奶茶加紅豆
*/public class redbeandecorator extends abstractdecorator
public redbeandecorator(abstractmilktea abstractmilktea)
@override
public string descript()
@override
public double getprice()
}
要點概述:package com.it.decorator;
/* * 測試類
裝飾者模式之通俗易懂
一句話 需要包裝,但不改變本質 同宗同源 在不改變原有物件的基礎之上,將功能附加到物件上。提供了比繼承更有彈性的替代方案 擴充套件原有物件功能 特點 1 注重覆蓋 擴充套件。2 裝飾器和被裝飾器都實現同乙個介面,主要目的是為了擴充套件之後依舊保留 oop 關係 同宗同源 3 滿足 is a 的關係。...
裝飾者設計模式 通俗易懂
精選30 雲產品,助力企業輕鬆上雲!裝飾模式 在不改變 原有類 和 不使用繼承的情況下,動態地擴充套件乙個物件的功能。因會建立乙個包裝物件,來包裹真實物件而得名。作用 增強物件的功能 例子1 牆 功能 遮風擋雨 包了牆紙的牆 本質還是牆 原功能 遮風擋雨 新增功能 陶冶情操 1 沒有改變原有類 2 ...
通俗易懂的理解 python 裝飾器
舉例def play print 小王在玩遊戲 sleep 3 print 遊戲結束 我想計算play花費的時間 def play start time.time print 小王在玩遊戲 sleep 3 print 遊戲結束 end time.time print 用時 format end st...