這篇文章主要講解了“Java裝飾者模式是什么意思”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Java裝飾者模式是什么意思”吧!
創(chuàng)新互聯(lián)公司專注于昆明企業(yè)網(wǎng)站建設,成都響應式網(wǎng)站建設,商城系統(tǒng)網(wǎng)站開發(fā)。昆明網(wǎng)站建設公司,為昆明等地區(qū)提供建站服務。全流程按需搭建網(wǎng)站,專業(yè)設計,全程項目跟蹤,創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務
裝飾模式的設計理念主要是以對客戶端透明的方式動態(tài)擴展對象的功能,是繼承關系的一個替代(繼承會產(chǎn)生大量的子類,而且代碼有冗余)。裝飾模式可以在不創(chuàng)造更多子類的情況下,將對象的功能加以擴展。裝飾模式把客戶端的調(diào)用委派到被裝飾類。裝飾模式的關鍵在于這種擴展完全是透明的(裝飾模式的透明性要求客戶端程序不應該將對象聲明為具體構件類型或具體裝飾類型,而應該全部聲明為抽象構件類型),裝飾模式的應用在java的I/O流中最為顯著。
抽象構件角色(Component):通常是一個抽象類或者一個接口,定義了一系列方法,方法的實現(xiàn)可以由子類實現(xiàn)或者自己實現(xiàn)。通常不會直接使用該類,而是通過繼承該類或者實現(xiàn)該接口來實現(xiàn)特定的功能。(例如,對于動物類,有一個抽象方法輸出所有的功能,基本功能包括:呼吸,覓食,睡覺等等)
具體構件角色(Concrete Component):是Component的子類,實現(xiàn)了對應的方法,它就是那個被裝飾的類。(具體構建角色可以建立很多個,例如狗,貓,鳥等等,如果是狗,我們可以裝飾一些吼叫的功能,吃肉的功能;鳥可以裝飾一些飛行的功能,帶有翅膀的功能等等。當然這些需要在具體裝飾角色中去具體定義)
裝飾角色(Decorator):是Component的子類,它是具體裝飾角色共同實現(xiàn)的抽象類(也可以是接口),并且持有一個Component類型的對象引用,它的主要作用就是把客戶端的調(diào)用委派到被裝飾類。
具體裝飾角色(Concrete Decorator):它是具體的裝飾類,是Decorator的子類,當然也是Component的子類。它主要就是定義具體的裝飾功能,例如上面說的,對于鳥這個具體構建角色而言,除了具備抽象構件角色基本的功能,它還具有一些飛行的功能,帶翅膀的功能。那么我們可以把這兩個功能定義成一個具體裝飾角色1,對于狗這個具體構件角色而言,我們可以把吼叫,吃肉這兩個功能定義成一個具體裝飾角色2,這樣,如果我們再定義一個狼這樣的具體構件角色的時候,就可以直接用具體裝飾角色2來進行裝飾。
以上面所說的動物的例子來寫代碼演示。
抽象構件角色(對應動物類)
public interface Component { void function(); }
具體構件角色(對應狗)
public class ConcreteComponent implements Component { @Override public void function() { System.out.println("基本功能:呼吸+覓食+睡覺"); } }
裝飾角色
public class Decorator implements Component { private Component component; //持有一個Component類型的對象引用 public Decorator(Component component) { this.component = component; } @Override public void function() { component.function(); //客戶端的調(diào)用委派給具體的子類 } }
具體裝飾角色(對應吼叫和吃肉這兩個功能)
public class ConcreteDecorator extends Decorator { public ConcreteDecorator(Component component) { super(component); } @Override public void function() { super.function(); System.out.println("附加功能:"); this.eat(); this.bellow(); } private void eat() { System.out.println("吃肉"); } private void bellow() { System.out.println("吼叫"); } }
客戶端測試:
public class ClientTest { public static void main(String[] args) { Component component = new ConcreteComponent(); System.out.println("------裝飾前:-------"); component.function(); Component newComponent = new ConcreteDecorator(component); System.out.println("------裝飾后:-------"); newComponent.function(); } } 輸出: ------裝飾前:------- 基本功能:呼吸+覓食+睡覺 ------裝飾后:------- 基本功能:呼吸+覓食+睡覺 附加功能:吃肉+吼叫
裝飾者模式主要應用在Java的I/O流中,如果讀者對I/O流體系比較混亂的話,不妨利用裝飾者模式去理理思路。OutputStream和InputStream就對應于抽象構件角色(Component),F(xiàn)ileInputStream和FileOutputStream就對應具體構件角色(ConcreteComponent),F(xiàn)ilterOutputStream和FilterInputStream就對應著裝飾角色(Decorator),而BufferedOutputStream,DataOutputStream等等就對應著具體裝飾角色。
感謝各位的閱讀,以上就是“Java裝飾者模式是什么意思”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對Java裝飾者模式是什么意思這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關知識點的文章,歡迎關注!
標題名稱:Java裝飾者模式是什么意思
標題鏈接:http://www.rwnh.cn/article22/jdghcc.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營銷、ChatGPT、動態(tài)網(wǎng)站、手機網(wǎng)站建設、企業(yè)網(wǎng)站制作、
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)