學習 設計模式 第三種 裝飾者模式

2021-09-29 13:13:53 字數 1462 閱讀 4457

uml圖:

說明:1、component抽象類或介面,用於定義最核心、最基本的物件。

2、concretecomponent具體的物件,實現component抽象類或介面;最核心、最基本的實現,需要裝飾的就是這個物件。

3、decorator裝飾角色,一般是抽象類,也可以是具體的類,該類中必定有個private變數指向component

4、decoratora、decoratorb具體裝飾類,實現具體裝飾方法

例子:穿衣服

1、最基本的抽象類===相對於component

public abstract class person
2、最基本的實現類

public class man extends person 

@override

public string dress()

}

3、抽象裝飾類

public class decorator extends person 

@override

public string dress()

}

4、裝飾具體實現類

public class tshirt extends decorator 

@override

public string dress()

}

public class underpants extends decorator 

@override

public string dress()

}

public class pants extends decorator 

@override

public string dress()

}

public class sock extends decorator 

@override

public string dress()

}

public class shoes extends decorator 

@override

public string dress()

}

5、測試類

public class decoratormain2 

}//結果:小明穿t恤穿**穿褲子穿襪子穿鞋子

優點:1、裝飾類和被裝飾類不互相耦合;2、靈活性高

缺點:1、靈活性高帶來程式上複雜性;2、使用繼承,多層巢狀,增加複雜性。

設計模式第三講 裝飾者模式

裝飾模式也算一種比較常見的設計模式,工作過程中很少刻意的去實現這種模式,因為這種模式也會帶來一些問題。比如小類太多,組織起來比較麻煩,對客戶端完全可見,如果不了解各個類的功能會很亂等等 當然也有很多優點 可以動態的給類增加一些職責,增加功能更加靈活,比起繼承來說也更加具有彈性 下面我們來看看它究竟是...

設計模式(三) 裝飾者模式

裝飾者結構圖 1 component 被裝飾者的抽象類或介面,定義了新增職責的方法 2 concretecomponent 被裝飾者的具體實現類,如果只有乙個被裝飾者,concretecomponent和component可以合二為一 3 decorator 裝飾者父類,繼承component被裝飾...

設計模式(三)裝飾者模式

星巴克咖啡館想要乙份選單系統,要求能夠計算不同種類咖啡加上不同調料 牛奶 豆漿 摩卡 奶泡。的 tom做了如下實現 每個咖啡都要繼承這個飲料類,然後對是否有各種調料進行配置,然後實現cost 方法。這樣基本解決了這個問題,但是如果現在又增加了幾種飲料,是不是需要更改現在的 呢?如何才能不對以前 做修...