您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“java中的裝飾器模式基本概念及實(shí)現(xiàn)”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
裝飾器模式,顧名思義起的是裝飾的作用,就是在一個(gè)類(lèi)上增加功能。如果通過(guò)繼承來(lái)增加功能,在不修改代碼的情況下,如果增加功能多的話(huà),會(huì)使類(lèi)的數(shù)量爆炸式增長(zhǎng),為管理帶來(lái)巨大的麻煩。裝飾器模式就比較好地解決了這一點(diǎn)。
以下為裝飾器模式的通用類(lèi)圖:
Component,一般是接口或者抽象類(lèi),定義了最簡(jiǎn)單的方法,裝飾器類(lèi)和被裝飾類(lèi)都要實(shí)現(xiàn)該接口。
ConcreteComponent,被裝飾類(lèi),實(shí)現(xiàn)了Component。
Decorator,裝飾器類(lèi),通過(guò)該類(lèi)為ConcreteComponent動(dòng)態(tài)添加額外的方法,實(shí)現(xiàn)了Component接口,并且該對(duì)象中持有一個(gè)Component的成員變量。
ConcreteDecoratorA,ConcreteDecoratorB,具體的裝飾類(lèi),該類(lèi)中的方法就是要為ConcreteComponent動(dòng)態(tài)添加的方法。
我們以生產(chǎn)一件衣服為例,生產(chǎn)一件衣服本身是個(gè)很簡(jiǎn)單的過(guò)程,一塊布料裁剪好了之后做出衣服的樣子就可以了,但是這樣的衣服是賣(mài)不出去的,因?yàn)楹翢o(wú)美感,我們需要通過(guò)一些裝飾來(lái)使衣服變得好看。但是時(shí)代在變化,人們的審美也在變化,裝飾總是不斷在變的,所以我們就要有一個(gè)靈活機(jī)動(dòng)的模式來(lái)修改裝飾。
Clothes.java
public interface Clothes { public void makeClothes(); }
MakeClothes.java
public class MakeClothes implements Clothes { @Override public void makeClothes() { System.out.println("制作一件衣服"); } }
步驟 3 創(chuàng)建裝飾器。
OperationSubstract.java
public class OperationSubstract implements Strategy{ @Override public int doOperation(int num1, int num2) { return num1 - num2; } }
話(huà)不多說(shuō),先來(lái)個(gè)衣服的最初成品,就是毫無(wú)美感的那種,那么如果現(xiàn)在要增加裝飾,可以用一個(gè)類(lèi)繼承MakeClothes,然后增加里面makeClothes()方法,但是如果過(guò)幾天裝飾就變了,那么又要改動(dòng)代碼,而且如果裝飾過(guò)多,這個(gè)類(lèi)就顯得很龐雜,不好維護(hù),這個(gè)時(shí)候裝飾器模式就來(lái)大顯身手了。
Decorator.java
public class Decorator implements Clothes { private Clothes clothes; public Decorator(Clothes _clothes) { this.clothes = _clothes; } @Override public void makeClothes() { clothes.makeClothes(); } }
這就是一個(gè)裝飾器,它有一個(gè)構(gòu)造函數(shù),參數(shù)是一個(gè)衣服類(lèi),同時(shí)它重寫(xiě)了makeClothes()方法,以便它的子類(lèi)對(duì)其進(jìn)行修改。下面是兩個(gè)子類(lèi),分別對(duì)衣服進(jìn)行了繡花和鏤空
Embroidery.java
public class Embroidery extends Decorator { public Embroidery(Clothes _clothes) { super(_clothes); } public void embroidery() { System.out.println("給衣服繡花"); } @Override public void makeClothes() { super.makeClothes(); this.embroidery(); } }
Hollow.java
public class Hollow extends Decorator { public Hollow(Clothes _clothes) { super(_clothes); } public void hollow() { System.out.println("關(guān)鍵位置鏤空"); } @Override public void makeClothes() { super.makeClothes(); this.hollow(); } }
這兩個(gè)子類(lèi)的構(gòu)造器都傳入一個(gè)衣服模型,而且兩個(gè)子類(lèi)分別有各自的方法——繡花和鏤空,但是他們均重寫(xiě)了makeClothes()方法,在制作衣服的過(guò)程中加入了繡花和鏤空的操作,這樣一來(lái),我們只需要增刪改這幾個(gè)裝飾器的子類(lèi),就可以完成各種不同的裝飾,簡(jiǎn)潔明了,一目了然。下面測(cè)試一下:
DecoratorDemo.java
public class DecoratorDemo { public static void main(String[] args) { Clothes clothes = new MakeClothes(); clothes = new Embroidery(clothes); clothes = new Hollow(clothes); clothes.makeClothes(); System.out.println("衣服做好了"); } }
執(zhí)行程序,輸出結(jié)果:
制作一件衣服 給衣服繡花 關(guān)鍵位置鏤空 衣服做好了
“java中的裝飾器模式基本概念及實(shí)現(xiàn)”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。