溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

java中的裝飾器模式基本概念及實(shí)現(xiàn)

發(fā)布時(shí)間:2021-09-10 15:15:50 來(lái)源:億速云 閱讀:152 作者:chen 欄目:互聯(lián)網(wǎng)科技

本篇內(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)圖: java中的裝飾器模式基本概念及實(shí)現(xiàn)

  • 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)添加的方法。

實(shí)現(xiàn)

我們以生產(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("制作一件衣服");     }  }
  1. 步驟 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í)用文章!

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI