国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

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

服務器之家 - 編程語言 - JAVA教程 - java設計模式之裝飾模式詳細介紹

java設計模式之裝飾模式詳細介紹

2019-10-26 16:18java教程網 JAVA教程

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

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

2.    裝飾模式以對客戶端透明的方式動態的給一個對象附加上更多的責任。換言之客戶端并不會覺的對象在裝飾前和裝飾后有什么區別。

3.    裝飾模式可以在不創造更多的子類的模式下,將對象的功能加以擴展。

4.    裝飾模式與類繼承的區別:

1)    裝飾模式是一種動態行為,對已經存在類進行隨意組合,而類的繼承是一種靜態的行為,一個類定義成什么樣的,該類的對象便具有什么樣的功能,無法動態的改變。

2)    裝飾模式擴展的是對象的功能,不需要增加類的數量,而類繼承擴展是類的功能,在繼承的關系中,如果我們想增加一個對象的功能,我們只能通過繼承關系,在子類中增加兩個方法。

3)    裝飾與繼承比較圖:

4)    裝飾模式是在不改變原類文件和使用繼承的情況下,動態的擴展一個對象的功能,它是通過創建一個包裝對象,也就是裝飾來包裹真是的對象。

5.    裝飾模式把對客戶端的調用委派給被裝飾的類,裝飾模式的關鍵在于這種擴展完全透明的。

6.    裝飾模式的構成:

1)    抽象構建角色(Component):給出一個抽象的接口,以規范準備接受附加責任的對象。相當于i/o流里面InputStream/OutputStream和Reader/Writer。

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

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

4)    具體的裝飾角色(ConcreteDecorator):負責給構建對象“貼上”附加的責任。相當于i/o流里面的BufferedOutputStream和BufferedInputStream以及DataOutputStream和DataInputSrtream。

7.    裝飾模式的特點:

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

2)    裝飾對象包含一個真實對象的引用(reference).

3)    裝飾對象接受所有來自客戶端的請求,它把這些請求轉發給真實的對象。

4)    裝飾對象可以在轉發這些請求以前或者以后增加一些附加的功能。這樣就能確保在運行時,不用修改給定對象結構就可以在外部增加附加的功能。在面向對象的程序設計中,通常是使用繼承的關系來擴展給定類的功能。

8.    案例:

1)    抽象的構建接口:

復制代碼代碼如下:


packagecom.abao.decorate;

 

 

public interface Component

{

   public void doSomething();

}


2)    具體的構建角色:

復制代碼代碼如下:


packagecom.abao.decorate;

 

public class ConcreteComponent implements Component

{

   @Override

   public void doSomething()

   {

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

   }

}


3)    裝飾角色:

復制代碼代碼如下:


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:

復制代碼代碼如下:


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:

復制代碼代碼如下:


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)    客戶端

復制代碼代碼如下:


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實現希爾排序的示例

    用Java實現希爾排序的示例

    問題:現有一段程序S,可以對任意n個數進行排序。如果現在需要對n^2個數進行排序,最少需要調用S多少次?只允許調用S,不可以做別的操作。我們用希爾...

    java教程網3752019-10-20
  • JAVA教程通過反射注解批量插入數據到DB的實現方法

    通過反射注解批量插入數據到DB的實現方法

    今天小編就為大家分享一篇關于通過反射注解批量插入數據到DB的實現方法,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友...

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

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

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

    Java技術棧3032019-06-28
  • JAVA教程Java I/O深入學習之File和RandomAccessFile

    Java I/O深入學習之File和RandomAccessFile

    這篇文章主要介紹了Java I/O深入學習之File和RandomAccessFile, I/O系統即輸入/輸出系統,對于一門程序語言來說,創建一個好的輸入/輸出系統并非易事。在充...

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

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

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

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

    java使用dom4j操作xml示例代碼

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

    java教程網3072019-10-22
  • JAVA教程java中的十個大類總結

    java中的十個大類總結

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

    java之家4162019-10-17
  • JAVA教程java從mysql導出數據的具體實例

    java從mysql導出數據的具體實例

    這篇文章主要介紹了java從mysql導出數據的具體實例,有需要的朋友可以參考一下 ...

    java技術網2262019-10-25
主站蜘蛛池模板: 国产电影一区二区三区图片 | 极品粉嫩饱满一线天在线 | 欧美激情视频一区二区三区在线播放 | 一级全黄少妇性色生活片免费 | 午夜精品福利在线观看 | 伊人网在线视频免费观看 | 亚洲三区在线观看 | 高清视频一区二区三区 | 99久久夜色精品国产亚洲1000部 | 国产精品一区二区三 | 国产精品一区二区三区在线播放 | 亚洲高清在线视频 | 国产精品久久久久久久久久久久久 | 成人免费xxxxx在线观看 | 在线视频亚洲 | 亚洲在线精品 | 国产福利91精品一区二区三区 | 欧美一区第一页 | 亚洲国产精品久久久 | 国产精品久久久久久久久免费桃花 | 视频在线一区 | 一级在线观看视频 | 亚洲成av人片在线观看无码 | 二区影院 | 国产一区免费视频 | 精品国产一区二区三区免费 | 欧美成年网站 | 欧美日韩亚洲国产精品 | xxxx网| 久久久久久久久一区二区三区 | 国产一区二区三区四区在线观看 | 国产免费自拍 | 一区国产精品 | 99热首页| 国产97在线播放 | 高清国产一区二区三区四区五区 | 91视频精选 | 狠狠操狠狠干 | 日韩影院在线 | 久久69精品久久久久久久电影好 | 久久国产99 |