裝飾模式介紹
裝飾模式是結構型設計模式之一,不必改變類檔案和使用繼承的情況下,動態地擴充套件乙個物件的功能,是繼承的替代方案之一。它是通過建立乙個包裝物件,也就是裝飾來包裹真實的物件。
定義
動態地給乙個物件新增一些額外的職責,就增加功能來說,裝飾模式比生成子類更為靈活。
裝飾模式結構圖
裝飾模式在現實生活中有很多例子,比如給乙個人穿上各種衣服,給一幅畫塗色上框等等,這次我要舉得例子有些不同,舉乙個武俠修煉武功的例子:楊過本身就會全真劍法,有兩位武學前輩洪七公和歐陽鋒分別傳授楊過打狗棒法和**功,這樣楊過除了會全真劍法還會打狗棒法和**功。
抽象元件(component)
作為武俠肯定要會使用武功的,我們先定義乙個武俠的抽象類,裡面有使用武功的抽象方法:
public
abstract
class
swordsman
元件具體實現類(concretecomponent)被裝飾的具體物件,在這裡就是被教授武學的具體的武俠,他就是楊過,楊過作為武俠當然也會武學,雖然不怎麼厲害:
public
class
yangguo
extends
swordsman
}
抽象裝飾者(decorator)抽象裝飾者保持了乙個對抽象元件的引用,方便呼叫被裝飾物件中的方法。在這個例子中就是武學前輩要持有武俠的引用,方便教授他武學並「融會貫通」:
public
abstract
class
master
extends
swordsman
@override
public
void
attackmagic()
}
裝飾者具體實現類(concretedecorator)這個例子中用兩個裝飾者具體實現類,分別是洪七公和歐陽鋒,他們負責來傳授楊過新的武功:
public
class
hongqigong
extends
master
public
void
teachattackmagic()
@override
public
void
attackmagic()
}
public
class
ouyangfeng
extends
master
public
void
teachattackmagic()
@override
public
void
attackmagic()
}
客戶端呼叫經過洪七公和歐陽鋒的教導,楊過除了初始武學全真劍法又學會了打狗棒法和**功:
public
class client
}
優點缺點使用場景 設計模式 裝飾者模式
public abstract class beverage public abstract double cost public abstract class condimentdecorator extends beverage public class darkroast extends be...
設計模式 裝飾者模式
沒什麼特別的,之前看懂了,這次自己再複述一下。畢竟把別人講懂了才是真的懂了。主要參考了head first 設計模式。例子講述的是在為星巴克咖啡的製作訂單的情況,比如客人點了飲料,那麼系統會自動算出 不知道是我沒有體會到,還是這個例子不太合適,算出 那麼簡單的事還需要用到類?不過不影響我們思考裝飾者...
設計模式 裝飾者模式
好幾天沒出部落格了,在學習android的一些新控制項的時候,用到了乙個模式,叫裝飾者模式,所以在此講講這個模式。模式,包含以下四個角色 1 抽象構件 component 角色 給出乙個抽象介面,以規範準備接收附加責任的物件。2 具體構件 concretecomponent 角色 定義乙個將要接收附...