裝飾模式定義:動態地給乙個物件新增額外的職責和功能。這句定義是啥意思呢?別急,我們來一起瞅瞅。假若已經存在乙個類girl;現在呢,要在此基礎上為該類的某乙個物件額外地增加功能或者或者修改原有的功能,我們可以怎麼做呢?很多童鞋說:這個簡單,可以這麼實現:
童鞋,請打住,你已經說錯了,請注意我的描述:為該類的某個物件修改功能,而不是修改這個類所有物件的功能!所以,以上兩種方式就用不上了。此時,就可以考慮採用裝飾模式來解決該問題——裝飾模式可在不改變類檔案並且不使用繼承的情況下,通過建立包裝物件(即裝飾)包裹了原本真實的物件,從而動態地擴充套件原物件的功能。舉個例子:我們都擔心摔碎手機螢幕,所以我們可以在手機的外表面裹一層材料(比如鋼化膜,手機套)從而使得手機具有了抗衰的新功能;並且手機原本的功能(打**,拍照,上網)並沒有受到任何影響。嗯哼,看完這個小例子,我們來瞅瞅裝飾模式中的四個角色:
童鞋們都知道飛機上的空姐吧,嗯哼;在此,我以大家最喜歡空姐aoisola為例來聊聊裝飾模式。眾所周知,空姐都喜歡把自己打扮(dress)打扮得漂漂亮亮,大方得體。工作結束之後呢,絕大部分的空姐就回家休息了;可是,aoisola又出現在社會名流組織的宴會上,這時候如果她再穿著工作中的裝束就不大合適了;所以,aoisola會在參加宴會前請造型設計師把自己打扮得**迷人。現在,我們就利用**結合示例來瞅瞅裝飾模式的使用。
public
abstract
class
girl
抽象類girl,其中有乙個方法dress
public
class
aoisola
extends
girl }
抽象類girl的具體實現aoisola
public
abstract
class
stylist
extends
girl @override
public
void
dress() }
抽象類stylist
public
class
lucy
extends
stylist @override
public
void
dress() public
void
beautify () }
抽象類stylist的具體實現lucy
嗯哼,裝飾設計模式的四個角色都齊了,開始測試:
public
class
test }
測試結果如下:
我是空空,我每天都穿得很漂亮我是造型師,經過裝扮空空變得更加**迷人
嗯哼,原本就穿得很漂亮的空姐aoisola經過造型師的打理變得更加**迷人了!
好了,看完了這個示例,我們來總結一下裝飾設計模式的應用場景。
在不採用繼承的方式對原架構進行功能擴充套件時,我們可利用裝飾設計模式動態地,透明地為被裝飾物件新增功能和職責。採用該模式,可以避免子類的快速擴張、精簡專案的架構。
來一起聊聊棧幀吧!!!
今天我們一起來 棧幀。那麼,首先呢,我們先想一下為什麼要討論棧幀呢?我想大家應該聽說過不少次,函式呼叫時,變數具有臨時性。那麼這個所謂的臨時性怎麼體現出來呢?那麼心裡揣著這個疑問,由我們接下來慢慢討論!1.討論前的準備工作 32位cpu通用暫存器 eax,ebx,ecx,edx,ebp,esp,es...
一起學設計模式 組合模式
組合模式 composite pattern 屬於結構型模式的一種,組合多個物件形成樹形結構來表示部分 整體的結構層次,對單個物件 葉子物件 和組合物件 容器物件 的使用具有一致性 組合模式對單個物件 葉子物件 和組合物件 容器物件 具有一致性,它將物件組織到樹結構中,可以用來描述整體與部分的關係。...
一起學設計模式 外觀模式
外觀模式 facade pattern 屬於結構型模式的一種,為子系統中的一組介面提供乙個統一的入口,它通過引入乙個外觀角色來簡化客戶端與子系統之間的互動.外觀模式是一種使用頻率非常高的結構型設計模式,當你要為乙個複雜子系統提供乙個簡單介面時。子系統往往因為不斷演化而變得越來越複雜。大多數模式使用時...