7 設計模式 裝飾模式

2021-10-24 17:23:41 字數 1746 閱讀 6212

裝飾模式即包裝模式,是一種結構設計模式。從字面上理解就是包裝乙個物件。比如人要穿衣服,房子要裝修。對於客戶端來說,它是乙個顯示的包裝,就是我知道你包裝了什麼。比如房子要裝修。那麼我們的房子可以抽象為乙個介面,裡面有乙個裝修的功能。它的某乙個實現類屬於空白。什麼都不做。跟這個空白類平級需要乙個裝修抽象類,裝修抽象類下有一些裝修要素,比如裝修牆,裝修沙發,裝修桌子。而我們只需要在這些裝修抽象類中維護乙個房子多型形式。**如下

/**

* 房子介面,用有裝修的功能

*/public

inte***ce

house

/**

* 空白房子,什麼都不做

*/public

class

blankhouse

implements

house

}

實際上這裡也可以不用抽象類,直接用實現類也可以,但是這樣就要在每個實現類維護house,所以這裡用乙個抽象類。

/**

* 裝飾器抽象類

*/public

abstract

class

abstractdecorator

implements

house

@override

public

void

decorator()

}

/**

* 沙發裝飾器

*/public

class

sofadecorator

extends

abstractdecorator

/** * 核心在於裝修的時候,先保留之前的裝修方案

*/@override

public

void

decorator()

private

void

sofadecorator()

}

public

class

walldecorator

implements

house

@override

public

void

decorator()

private

void

walldecorate()

}

public

class

maintest

}

我是乙個空白房子..

....

....

....

..我是乙個空白房子

裝修了大沙發..

....

....

....

..我是乙個空白房子

裝修了大沙發

裝修上了大牆

》我是乙個空白房子

裝修了大沙發

裝修上了大牆

裝飾器的目的就是可以層層包裝,包裝完成之後還是屬於自身的那個物件。人穿上衣服還是那個人,房子裝修之後還是那個房子。只是顯示的新增了更多的東西在上面,具有組合的效果。可以選擇性的裝飾一些效果,比純粹的繼承要更加的靈活。但是因為巢狀層數太多,可能會導致問題排查不容易。

使用場景

1.需要去擴充套件乙個類的功能的時候。

2.動態的進行類功能的加裝和減裝的時候。

設計模式7 裝飾模式

給乙個物件增加一些新的功能,而且是動態的,要求裝飾物件和被裝飾物件實現同乙個介面,裝飾物件持有被裝飾物件的例項 裝飾介面sourceable public inte ce sourceable 被裝飾類source public class source implements sourceable ...

設計模式(7) Decorator 裝飾模式

裝飾模式也是一種日常編碼中經常會不自覺採用的設計模式。其核心理念是 乙個類有自己的核心功能和職責,且這個類的 相對已經固定,不希望改動維護。現在要為這個類加入一謝額外的功能,這些功能不是一定必須的,而且可能是動態新增的,根據實際要求加入某一種或幾種。但是不管加入什麼額外功能,客戶眼中始終還是在操作這...

Java設計模式7 裝飾器模式

裝飾器模式 就是對已經存在的某些類進行裝飾,以此來擴充套件一些功能。component 抽象構件角色 真實物件和裝飾物件有相同的介面。這樣,客戶端物件就能夠以與真實物件相同的方式同裝飾物件互動。concretecomponent 具體構件角色 真實物件,實現component介面。decorator...