小白談談裝飾模式

2021-10-04 14:16:19 字數 1975 閱讀 9621

簡單理解,裝飾模式就是不斷給乙個物品或者一件事進行動態裝飾,在不改變其結構的前提下,使其新增功能。

舉例:當我們有了一台車之後,每隔一段時間都會回去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...