裝飾模式

定義

在不必改變原類文件和使用繼承的情況下,動態(tài)地擴展一個對象的功能。它是通過創(chuàng)建一個包裝對象,也就是裝飾來包裹真實的對象

裝飾模式的特點

  1. 裝飾對象和真實對象有相同的接口。這樣客戶端對象就能以和真實對象相同的方式和裝飾對象交互
  2. 裝飾對象包含一個真實對象的引用(reference)
  3. 裝飾對象接受所有來自客戶端的請求。它把這些請求轉(zhuǎn)發(fā)給真實的對象
  4. 裝飾對象可以在轉(zhuǎn)發(fā)這些請求以前或以后增加一些附加功能。這樣就確保了在運行時,不用修改給定對象的結(jié)構(gòu)就可以在外部增加附加的功能。在面向?qū)ο蟮脑O(shè)計中,通常是通過繼承來實現(xiàn)對給定類的功能擴展。

場景:更具Coder的技能 分發(fā)工資,會的技能越多發(fā)的工資當然也就越多

接口

 protocol ICoder {
//技能
func skill()
//工資
func pay()-> Int
}

對象(重點必須繼承統(tǒng)一接口ICoder)

//程序員
class Coder: ICoder {

init(owner: String) {
    print("我是\(owner)")
}

func skill() {

}
func pay()-> Int {
    return 2000
}
}

裝飾器

 //裝飾器 裝飾對象和真實對象有相同的接口ICoder
class Decorator_Coder: ICoder {
var coder: ICoder?

func pay() -> Int {
    return coder?.pay() ?? 0
}

func  skill() {
    coder?.skill()
}

func decorator(_ coder: ICoder) -> ICoder {
    //裝飾對象包含一個真實對象的引用
    self.coder = coder
    return self
}
}

裝飾對象

// 裝飾器對象
class swift: Decorator_Coder {
override func pay() -> Int {
    return super.pay() + 1000
}
override func skill() {
    super.skill()
    //裝飾對象可以在轉(zhuǎn)發(fā)這些請求以前或以后增加一些附加功能。這樣就確保了在運行時,不用修改給定對象的結(jié)構(gòu)就可以在外部增加附加的功能。在面向?qū)ο蟮脑O(shè)計中,通常是通過繼承來實現(xiàn)對給定類的功能擴展。
    print("我會swift")
}
}
class weekx: Decorator_Coder {
override func pay() -> Int {
    return super.pay() + 1000
}
override func skill() {
    super.skill()
    print("我會weekx")
}
}
class donet: Decorator_Coder {
override func pay() -> Int {
    return super.pay() + 1000
}
override func skill() {
    super.skill()
    print("我會donet")
}
}

真實對象開始裝飾

  var LMD:ICoder=Coder(owner:"李美東")
     //裝飾對象接受所有來自客戶端的請求。它把這些請求轉(zhuǎn)發(fā)給真實的對象
    LMD = swift().decorator(LMD)
    LMD = weekx().decorator(LMD)
    print("工資:\(LMD.pay())")
    
    var WZZ:ICoder=Coder(owner:"王增站")
    WZZ = swift().decorator(WZZ)
    print("工資:\(WZZ.pay())")
    
    var WT:ICoder=Coder(owner:"王騰")
    WT = swift().decorator(WT)
    WT = donet().decorator(WT)
      print("工資:\(WT.pay())")
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. 概述 demo地址,歡迎star 2. 問題 3. 解決方案 裝飾器模式: 動態(tài)地給一個對象添加一些額外的...
    barry閱讀 305評論 0 0
  • (轉(zhuǎn)載)原文地址 在閻宏博士的《JAVA與模式》一書中開頭是這樣描述裝飾(Decorator)模式的: 裝飾模式又...
    zjk_00閱讀 681評論 0 2
  • 1. 何為裝飾模式 1.1 定義: 在不必改變原類文件和使用繼承的情況下,動態(tài)地擴展一個對象的功能。它是通過創(chuàng)建一...
    LeeLeCoder閱讀 326評論 0 0
  • 小學(xué)的時候,寫過一篇作文,叫做《我長大后想成為…》,很多人說想成為科學(xué)家、宇航員或者畫家。我想成為一名記者或者是作...
    一池南風閱讀 476評論 0 5
  • Memory is after all memory, I can't return to my younger ...
    人與海閱讀 449評論 0 0

友情鏈接更多精彩內(nèi)容