通俗易懂的裝飾器模式

2021-10-10 06:20:24 字數 2012 閱讀 8036

裝飾器模式(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...