一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務(wù)器之家 - 編程語言 - JAVA教程 - java設(shè)計(jì)模式之裝飾模式詳細(xì)介紹

java設(shè)計(jì)模式之裝飾模式詳細(xì)介紹

2019-10-26 16:18java教程網(wǎng) JAVA教程

這篇文章主要介紹了java設(shè)計(jì)模式之裝飾模式,有需要的朋友可以參考一下

1.    裝飾模式(Decorator)的定義:又名包裝(Wrapper)模式,裝飾模式以對(duì)客戶端透明的方式擴(kuò)展對(duì)象的功能,是繼承關(guān)系的一個(gè)替代方案。

2.    裝飾模式以對(duì)客戶端透明的方式動(dòng)態(tài)的給一個(gè)對(duì)象附加上更多的責(zé)任。換言之客戶端并不會(huì)覺的對(duì)象在裝飾前和裝飾后有什么區(qū)別。

3.    裝飾模式可以在不創(chuàng)造更多的子類的模式下,將對(duì)象的功能加以擴(kuò)展。

4.    裝飾模式與類繼承的區(qū)別:

1)    裝飾模式是一種動(dòng)態(tài)行為,對(duì)已經(jīng)存在類進(jìn)行隨意組合,而類的繼承是一種靜態(tài)的行為,一個(gè)類定義成什么樣的,該類的對(duì)象便具有什么樣的功能,無法動(dòng)態(tài)的改變。

2)    裝飾模式擴(kuò)展的是對(duì)象的功能,不需要增加類的數(shù)量,而類繼承擴(kuò)展是類的功能,在繼承的關(guān)系中,如果我們想增加一個(gè)對(duì)象的功能,我們只能通過繼承關(guān)系,在子類中增加兩個(gè)方法。

3)    裝飾與繼承比較圖:

4)    裝飾模式是在不改變?cè)愇募褪褂美^承的情況下,動(dòng)態(tài)的擴(kuò)展一個(gè)對(duì)象的功能,它是通過創(chuàng)建一個(gè)包裝對(duì)象,也就是裝飾來包裹真是的對(duì)象。

5.    裝飾模式把對(duì)客戶端的調(diào)用委派給被裝飾的類,裝飾模式的關(guān)鍵在于這種擴(kuò)展完全透明的。

6.    裝飾模式的構(gòu)成:

1)    抽象構(gòu)建角色(Component):給出一個(gè)抽象的接口,以規(guī)范準(zhǔn)備接受附加責(zé)任的對(duì)象。相當(dāng)于i/o流里面InputStream/OutputStream和Reader/Writer。

2)    具體的構(gòu)建角色(ConcreteComponent):定義一個(gè)將要接受附加責(zé)任的類。相當(dāng)于i/o里面的FileOutputStream和FileInputStream。

3)    裝飾角色(Docorator):持有一個(gè)抽象構(gòu)建(Component)角色的引用,并定義一個(gè)與抽象構(gòu)件一致的接口。相當(dāng)于i/o里面的FilerOutputStream和FilterInputStream。

4)    具體的裝飾角色(ConcreteDecorator):負(fù)責(zé)給構(gòu)建對(duì)象“貼上”附加的責(zé)任。相當(dāng)于i/o流里面的BufferedOutputStream和BufferedInputStream以及DataOutputStream和DataInputSrtream。

7.    裝飾模式的特點(diǎn):

1)    裝飾對(duì)象和真實(shí)對(duì)象具有相同的接口,這樣客戶端對(duì)象就可以以真實(shí)對(duì)象的相同的方式和裝飾對(duì)象交互。

2)    裝飾對(duì)象包含一個(gè)真實(shí)對(duì)象的引用(reference).

3)    裝飾對(duì)象接受所有來自客戶端的請(qǐng)求,它把這些請(qǐng)求轉(zhuǎn)發(fā)給真實(shí)的對(duì)象。

4)    裝飾對(duì)象可以在轉(zhuǎn)發(fā)這些請(qǐng)求以前或者以后增加一些附加的功能。這樣就能確保在運(yùn)行時(shí),不用修改給定對(duì)象結(jié)構(gòu)就可以在外部增加附加的功能。在面向?qū)ο蟮某绦蛟O(shè)計(jì)中,通常是使用繼承的關(guān)系來擴(kuò)展給定類的功能。

8.    案例:

1)    抽象的構(gòu)建接口:

復(fù)制代碼代碼如下:


packagecom.abao.decorate;

 

 

public interface Component

{

   public void doSomething();

}


2)    具體的構(gòu)建角色:

復(fù)制代碼代碼如下:


packagecom.abao.decorate;

 

public class ConcreteComponent implements Component

{

   @Override

   public void doSomething()

   {

      System.out.println("功能A");

   }

}


3)    裝飾角色:

復(fù)制代碼代碼如下:


packagecom.abao.decorate;

 

 

public class Decorate implements Component

{

   private Component component;

 

   public Decorate(Component component)

   {

      this.component = component;

   }

 

   @Override

   public void doSomething()

   {

      component.doSomething();

   }

}


4)    具體裝飾角色1:

復(fù)制代碼代碼如下:


packagecom.abao.decorate;

 

 

public class ConcreteDecorate1 extends Decorate

{

   public ConcreteDecorate1(Component component)

   {

      super(component);

   }

 

   @Override

   public void doSomething()

   {

      super.doSomething();

    

      this.doAnotherDosomething();

   }

 

   private void doAnotherDosomething()

   {

      System.out.println("功能B");

   }

}


5)    具體裝飾角色2:

復(fù)制代碼代碼如下:


packagecom.abao.decorate;

 

 

public class ConcreteDecorate2 extends Decorate

{

   public ConcreteDecorate2(Component component)

   {

      super(component);

   }

 

   @Override

   public void doSomething()

   {

      super.doSomething();

    

      this.doAnotherDosomething();

    

   }

 

   private void doAnotherDosomething()

   {

      System.out.println("功能C");

   }

}


6)    客戶端

復(fù)制代碼代碼如下:


packagecom.abao.decorate;

 

 

public class Client

{

   public static void main(String[] args)

   {

 

      Component component = new ConcreteDecorate1(

        new ConcreteDecorate2(new ConcreteComponent()));

      component.doSomething();

   }

}


9.    完!

延伸 · 閱讀

精彩推薦
  • JAVA教程用Java實(shí)現(xiàn)希爾排序的示例

    用Java實(shí)現(xiàn)希爾排序的示例

    問題:現(xiàn)有一段程序S,可以對(duì)任意n個(gè)數(shù)進(jìn)行排序。如果現(xiàn)在需要對(duì)n^2個(gè)數(shù)進(jìn)行排序,最少需要調(diào)用S多少次?只允許調(diào)用S,不可以做別的操作。我們用希爾...

    java教程網(wǎng)3752019-10-20
  • JAVA教程通過反射注解批量插入數(shù)據(jù)到DB的實(shí)現(xiàn)方法

    通過反射注解批量插入數(shù)據(jù)到DB的實(shí)現(xiàn)方法

    今天小編就為大家分享一篇關(guān)于通過反射注解批量插入數(shù)據(jù)到DB的實(shí)現(xiàn)方法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友...

    Scub2172019-06-20
  • JAVA教程面試中遇到的java逃逸分析問題

    面試中遇到的java逃逸分析問題

    這篇文章主要介紹了面試中遇到的java逃逸分析問題,逃逸分析(Escape Analysis)簡(jiǎn)單來講就是,Java Hotspot 虛擬機(jī)可以分析新創(chuàng)建對(duì)象的使用范圍,并決定是否...

    Java技術(shù)棧3032019-06-28
  • JAVA教程Java I/O深入學(xué)習(xí)之File和RandomAccessFile

    Java I/O深入學(xué)習(xí)之File和RandomAccessFile

    這篇文章主要介紹了Java I/O深入學(xué)習(xí)之File和RandomAccessFile, I/O系統(tǒng)即輸入/輸出系統(tǒng),對(duì)于一門程序語言來說,創(chuàng)建一個(gè)好的輸入/輸出系統(tǒng)并非易事。在充...

    木瓜芒果5332019-07-07
  • JAVA教程Java讀取.properties配置文件方法示例

    Java讀取.properties配置文件方法示例

    這篇文章主要介紹了Java讀取.properties配置文件,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨...

    黃浩#4622019-06-20
  • JAVA教程java使用dom4j操作xml示例代碼

    java使用dom4j操作xml示例代碼

    dom4j是一個(gè)Java的XML API,類似于jdom,用來讀寫XML文件,下面我來個(gè)小例子學(xué)習(xí)他的使用方法 ...

    java教程網(wǎng)3072019-10-22
  • JAVA教程java中的十個(gè)大類總結(jié)

    java中的十個(gè)大類總結(jié)

    java.lang.string字符串類將是無可爭(zhēng)議的冠軍在任何一天的普及和不可以否認(rèn)。這是最后一個(gè)類,用來創(chuàng)建操作不可變字符串字面值 ...

    java之家4162019-10-17
  • JAVA教程java從mysql導(dǎo)出數(shù)據(jù)的具體實(shí)例

    java從mysql導(dǎo)出數(shù)據(jù)的具體實(shí)例

    這篇文章主要介紹了java從mysql導(dǎo)出數(shù)據(jù)的具體實(shí)例,有需要的朋友可以參考一下 ...

    java技術(shù)網(wǎng)2262019-10-25
主站蜘蛛池模板: 草莓社区| 国产一成人精品福利网站 | 99撸 | 王淑兰李思雨李铁柱乡村小说免费 | 国产一区二区视频在线观看 | 经典三级四虎在线观看 | 狠狠干2017 | 奇米影视久久777中文字幕 | 国产精品久久国产三级国电话系列 | sss亚洲国产欧美一区二区 | 亚洲日本中文字幕天堂网 | 极品在线| 色综合久久丁香婷婷 | 大伊香蕉精品视频一区 | 日韩毛片免费在线观看 | 国产乱码在线精品可播放 | 免费又爽又黄禁片视频在线播放 | 农夫69小说小雨与农村老太 | 五月婷婷丁香在线视频 | 欧美一级久久久久久久大片 | 国产午夜亚洲精品 | 国产在线视频在线观看 | 青青在线视频免费 | 午夜一区二区三区 | 免费叼嘿视频 | 亚洲国产日韩欧美mv | 236z最新伦理| 精品午夜久久网成年网 | 亚洲天堂免费看 | 免费观看欧美性一级 | 大妹子最新视频在线观看 | sxx免费看视频在线播放 | 女人国产香蕉久久精品 | 精精国产xxxx视频在线播放器 | 99视频在线免费 | 69av免费视频 | 911精品国产亚洲日本美国韩国 | 好大好深好舒服 | 日本人欧美xx | 91精品乱码一区二区三区 | 日韩在线观看网站 |