設計模式學習三 裝修者模式

2021-09-01 03:29:43 字數 2289 閱讀 2604

一.概念

動態的給乙個物件新增額外的職責。想要擴充套件功能的話,裝飾者提供了一種有別於繼承的另外一種選擇。

二.uml

component(概念中提到的物件介面),也就是「被裝飾者」。

concreatecomponent(未新增任何職責的,物件介面的子類)。

decorator(裝飾者抽象類),擴張了物件介面的功能。

concretedrcorator(具體裝飾類),具體怎麼裝飾物件介面的在這些類裡面反映。

三.例項分析

家裡買了一套房子,需要裝修,考慮到預算只有這麼多,不能採用全包的方式,於是採用將裝修工作細化,以節省開銷。

/** * 被裝修者-房子

* @author eason

* */

public inte***ce house

blankhouse

package com.zzy.decorator;

/** * 未經裝修的房子

* @author eason

* */

public class blankhouse implements house

}

decorator

package com.zzy.decorator;

/** * 裝修工抽象類

* @author eason

* */

public class decorator implements house

@override

public void decorate()

}

electricwirer

package com.zzy.decorator;

/** * 電線工

* @author eason

* */

public class electricwirer extends decorator

@override

public void decorate()

}

floorer

package com.zzy.decorator;

/** * 地板工

* @author eason

* */

public class floorer extends decorator

@override

public void decorate()

}

waterpiper

package com.zzy.decorator;

/** * 水管工

* @author eason

* */

public class waterpiper extends decorator

@override

public void decorate()

}

testdecorator

package com.zzy.decorator;

/** * 測試類

* @author eason

* */

public class testdecorator

}

四.使用場景為已有元件動態新增更多功能。

五.使用感受

將裝飾功能的**從component裡面提了出來,簡化了component。

客戶端可以在執行時根據需要,選擇需要的功能來包裝component。

繼承是擴充套件功能的方式之一,但並不見得是達到彈性設計的最佳形方式。

組合和委託可用於在執行時動態地加上新的行為。裝飾者模式實際上就是組合和委託。再次提到組合和委託,第一次提到是在策略模式 裡面。

在日常的設計中,應該允許行為被擴充套件,而不需修改現有的**。

裝修者會導致設計中出現許多小物件,如果過度使用,會讓程式變的複雜。

設計模式學習(三)之裝飾者模式

設計原則 類應該對擴充套件開放,對修改關閉 我們的目標是允許類容易擴充套件,在不修改 的情況下,就可以搭配新的行為,如能實現這樣的目標,這樣的設計具有彈性,可以應對改變,可以接受新的功能來應對改變的需求 裝飾者和被裝飾者物件有相同的超型別 可以用乙個或者多個裝飾者包裝乙個物件 既然裝飾者和被裝飾者有...

設計模式學習筆記(三) 裝飾者模式

同系列文章 1.設計模式學習筆記 一 策略模式 2.設計模式學習筆記 二 觀察者模式 我又來了,續更 接下來的內容是觀察者模式的學習筆記 以下正文 裝飾者模式 動態地將責任附加到物件上。若要拓展功能,裝飾者提供了比繼承更加富有彈性的替代方案。先大概看看下面的幾張圖,幫助恢復記憶 類圖 思路 以咖啡為...

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

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