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