簡單理解,裝飾模式就是不斷給乙個物品或者一件事進行動態裝飾,在不改變其結構的前提下,使其新增功能。
舉例:當我們有了一台車之後,每隔一段時間都會回去4s店進行保養的,當車子在4s店做完保養後,4s店都會給我們列印乙個清單,表示所有在4s店的服務。假如我們不只是做保養,還需要給車加個大尾翼和換個顏色,那麼用普通方式如下:
首先定義乙個4s店基本服務的抽象類:
public
abstract
class
fours
再定義4s店基本服務的具體實現:
public
class
baseservice
extends
fours
//向顧客羅列費用清單
@override
public
void
list()
}
顧客說我不止是做保養,還需要加個尾翼,換個顏色
那就是4s店的特殊服務了:
public
class
specialservice
extends
baseservice
//給車新增個裝飾
private
void
add(
)//因為保養是基本服務,所以無論新增任何其他服務都需要加入
@override
public
void
list()
}
給顧客檢視清單:
public
class
customer
}
實驗結果:
弊端:由此可見,通過繼承實現裝飾,不斷新增,會導致類**,類的數量激增,如果以後需要維護,不僅是工作量大,而且維護成本也很高。
裝飾模式實現:
定義乙個裝飾的抽象類,用於封裝4s店,**如下:
public
class
decorator
extends
fours
//4s店基本服務保養還是得做的
public
void
unkeep()
//還是需要給客戶羅列清單的
public
void
list()
}
4s店實現乙個更換顏色的服務:
public
class
colordecorator
extends
decorator
//換個顏色
private
void
color()
//給顧客羅列費用清單
@override
public
void
list()
}
4s店實現乙個新增部件的服務:
public
class
adddecorator
extends
decorator
//新增個大尾翼
private
void
add(
)//重新列印清單
@override
public
void
list()
}
顧客檢視清單時:
public
class
customer
}
裝飾模式還有乙個非常好的優點,擴充套件性非常好,在乙個專案中,你會有非常多因素考慮不到,特別是業務的變更,總會有新的需求的出現,如果使用該模式會很簡便就給專案進行新增了,十分容易維護。
本文**:
提取碼:ub0r
小白設計模式 裝飾者模式
能夠動態的給物件增加行為職責的一種模式,靈活性遠勝於繼承。抽象元件 component 定義抽象行為介面。具體元件 concrete component 定義具體實現行為介面的類,繼承自抽象元件,也做被裝飾者,用於被附加各種行為。抽象裝飾者 decorator 持有乙個component的引用,並繼...
談談MVC模式
mvc模式簡介 mvc是架構性框架,而不是功能性框架。mvc模式的功能 指導web應用的程式框架,使得web應用架構更加合理,使得頁面展示和邏輯處理分離開來。mvc模式的組成 model vo 邏輯層 資料封裝 vo 資料獲取 vo 邏輯層api,暴露應用的功能 view 展示資料,觸發事件,人機互...
設計模式 裝飾模式
裝飾模式,動態地給乙個物件新增一些額外的職責,就增加功能來說,裝飾模式比生成子類更為靈活。m 超級瑪麗 普通繼承模式實現 a 發鏢 能組合出七種功能 m1 a m4 a b b 變身 m2 b m5 a c c 無敵 m3 c m6 b c m7 a b m m1 a b 組合方法 new m2 m...