最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java設計模式之代理模式與裝飾模式實例詳解

 更新時間:2017年09月22日 10:00:18   作者:索隆  
這篇文章主要介紹了Java設計模式之代理模式與裝飾模式,結合具體實例形式分析了代理模式與裝飾模式的概念、功能、java實現(xiàn)方法與相關使用注意事項,需要的朋友可以參考下

本文實例講述了Java設計模式之代理模式與裝飾模式。分享給大家供大家參考,具體如下:

之所以把這兩種模式放在一起說,是因為我發(fā)現(xiàn)這了兩種模式幾乎一模一樣!

從網(wǎng)上也搜了一些資料,發(fā)現(xiàn)兩者還是有一些區(qū)別的。我們在學習的同時也把這種困惑搞清楚。

定義:

代理模式,為其他對象提供一種代理以控制對這個對象的訪問。

裝飾模式,動態(tài)地給一個對象添加一些額外的職責。

代理模式,很好理解,就是把一個對象再次封裝,以后就對封裝的對象訪問就可以了。

因為代理對象已經(jīng)取代了被代理對象。

裝飾模式,給一個對象增加功能,形象一點就是做為一個服務生站在一邊提供服務。

所以根本的區(qū)別是,裝飾模式對象還在場,不是取代原對象,而是在一邊提供服務。

本文所闡述觀點均為個人理解,只對本人負責。

下面給出例子:

package test.design.proxydecorator;
/**
 * 接口定義行為:吃飯
 * @author lushuaiyin
 *
 */
public interface Eatable {
  void eatFood();
}

package test.design.proxydecorator;
/**
 * 實現(xiàn)類
 * @author lushuaiyin
 *
 */
public class Man implements Eatable{
  @Override
  public void eatFood() {
    System.out.println("I am eating food! Happy!");
  }
}

以上是普通的接口與實現(xiàn),下面是模式實例

代理模式

package test.design.proxydecorator;
/**
 * 代理模式
 * 代理對象把被代理對象封裝,像一個包裝盒把被代理對象包裹起來。
 * 它不改變被代理對象的原有邏輯,只是增加來了一些自己的服務,像一個代理一樣。
 * 代理從使用上給調(diào)用者的感覺就是你已經(jīng)取代了原來的對象。
 * 就像皇太后取代小皇帝實行垂簾聽政。
 * @author Administrator
 *
 */
public class ProxyMan implements Eatable{
  private Eatable eatable;
  public ProxyMan(){
    System.out.println("proxy: I am proxy object. I will help you create a object of Man that wnt to be proxyed");
    this.eatable=new Man();
    //注意代理對象把被代理對象封裝,在內(nèi)部有實際的被代理對象,這個調(diào)用者是不知道的。
  }
  @Override
  public void eatFood() {
    //代理對象把被代理對象的功能封裝,蛋不改變其內(nèi)部邏輯,只是增加一些服務。
    System.out.println("proxy: I know you are hungry,so I cook for you some food.");
    this.eatable.eatFood();
    System.out.println("proxy: Now you eat up food. Let me help you clean the dishes.");
  }
}

裝飾模式

package test.design.proxydecorator;
/**
 * 裝飾的抽象.
 * 也可以不用抽象類,簡單的父類也可以,只要實現(xiàn)裝飾功能.
 * 抽象只是為了增加一層封裝,規(guī)定裝飾者必有的裝飾功能而已。
 * @author lushuaiyin
 *
 */
public abstract class DecoratorMan {
  protected Eatable eatable;
  //使用構造函數(shù)或者set方法(或其他方法)把接口對象傳入。
  //注意,必須保證這個對象的傳入,最好還是用構造函數(shù)。
  public DecoratorMan(Eatable eatable){
    this.eatable=eatable;
  }
  public void eatFood(){
    this.eatable.eatFood();
  };
}

package test.design.proxydecorator;
/**
 * 裝飾模式
 * 裝飾對象時獨立于原來的對象的。它和被裝飾的對象有關系,但是是獨立的對象。
 * 裝飾對象更像一個酒店服務生,為別人提供服務,所以他還是他自己,他有自己的實際存在。
 * @author lushuaiyin
 *
 */
public class Decorator extends DecoratorMan{
  public Decorator(Eatable eatable) {
    super(eatable);
  }
  //重寫父類方法
  public void eatFood(){
    decoratorServiceCookFood();//裝飾的具體行為
    super.eatable.eatFood();
    decoratorServiceCleanDishes();//裝飾的具體行為
  };
  public void decoratorServiceCookFood(){
    System.out.println("Decorator: I know you are hungry,so I cook for you some food.");
  }
  public void decoratorServiceCleanDishes(){
    System.out.println("Decorator: Now you eat up food. Let me help you clean the dishes.");
  }
}

最關鍵的是調(diào)用,這也是這兩種模式的主要區(qū)別所在!

package test.design.proxydecorator;
public class TestMain {
  /**
   * @param args
   */
  public static void main(String[] args) {
    //代理模式
    System.out.println("代理模式:");
    Man m1=new Man();//通常情況下
    m1.eatFood();
    System.out.println("---------------------------");
    //代理模式者直接取代某對象,你連你想要見的人的面都見不到。
    //它說你要見的人已經(jīng)把所有事委托于我,他會的我會;他不會的,我也會。我就是他的替代增強版。
    Eatable e1=new ProxyMan();
    e1.eatFood();
    System.out.println("------------分割---------------");
    System.out.println("裝飾模式:");
    Man m2=new Man();//通常情況下
    m2.eatFood();
    System.out.println("---------------------------");
    //裝飾模式者站在一邊提供各種服務.
    //裝飾者和被裝飾者都在場,裝飾者提供服務,賺取小費。
    Decorator d1=new Decorator(m2);
    d1.eatFood();
  }
}

打印:

代理模式:
I am eating food! Happy!
---------------------------
proxy: I am proxy object. I will help you create a object of Man that wnt to be proxyed
proxy: I know you are hungry,so I cook for you some food.
I am eating food! Happy!
proxy: Now you eat up food. Let me help you clean the dishes.
------------分割---------------
裝飾模式:
I am eating food! Happy!
---------------------------
Decorator: I know you are hungry,so I cook for you some food.
I am eating food! Happy!
Decorator: Now you eat up food. Let me help you clean the dishes.

更多java相關內(nèi)容感興趣的讀者可查看本站專題:《Java數(shù)據(jù)結構與算法教程》、《Java操作DOM節(jié)點技巧總結》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總

希望本文所述對大家java程序設計有所幫助。

相關文章

  • Spring中的@ConditionalOnProperty作用和用法詳解

    Spring中的@ConditionalOnProperty作用和用法詳解

    這篇文章主要介紹了Spring中的@ConditionalOnProperty作用和用法詳解,在spring boot中有時候需要控制配置類是否生效,可以使用@ConditionalOnProperty注解來控制@Configuration是否生效,需要的朋友可以參考下
    2023-11-11
  • Java 同步鎖(synchronized)詳解及實例

    Java 同步鎖(synchronized)詳解及實例

    這篇文章主要介紹了Java 同步鎖(synchronized)詳解及實例的相關資料,需要的朋友可以參考下
    2017-03-03
  • Java實現(xiàn)對象排序的兩種方式詳解

    Java實現(xiàn)對象排序的兩種方式詳解

    這篇文章主要介紹了Java實現(xiàn)對象排序的兩種方式詳解,在Java中經(jīng)常會涉及到對象數(shù)組的排序問題,則就提到對象之間的比較問題,今天我們就來看一下兩種不同排序方式之間的區(qū)別,需要的朋友可以參考下
    2023-09-09
  • Java的方法和this關鍵字如何理解與應用

    Java的方法和this關鍵字如何理解與應用

    Java語言中的“方法”(Method)在其他語言當中也可能被稱為“函數(shù)”(Function)。對于一些復雜的代碼邏輯,如果希望重復使用這些代碼,并且做到“隨時任意使用”,那么就可以將這些代碼放在一個大括號{}當中,并且起一個名字。使用代碼的時候,直接找到名字調(diào)用即可
    2021-10-10
  • 一篇文章帶你入門Java封裝

    一篇文章帶你入門Java封裝

    Java面向對象的三大特性:封裝、繼承、多態(tài)。下面對三大特性之一封裝進行了總結,需要的朋友可以參考下,希望能給你帶來幫助
    2021-08-08
  • Guava - 并行編程Futures詳解

    Guava - 并行編程Futures詳解

    這篇文章主要介紹了Guava - 并行編程Futures詳解方法的相關資料,需要的朋友可以參考下
    2016-09-09
  • RocketMQ的push消費方式實現(xiàn)示例

    RocketMQ的push消費方式實現(xiàn)示例

    這篇文章主要為大家介紹了RocketMQ的push消費方式實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪<BR>
    2022-08-08
  • MybatisPlus實現(xiàn)真正批量插入的詳細步驟

    MybatisPlus實現(xiàn)真正批量插入的詳細步驟

    在數(shù)據(jù)庫操作中,批量插入是提升效率的重要手段,MyBatis-Plus提供了多種批量插入方法,但默認的saveBatch方法效率并不高,文章介紹了通過手動拼接SQL、使用IService接口以及自定義insertBatchSomeColumn方法進行優(yōu)化,以實現(xiàn)更高效的批量插入,并給出了性能優(yōu)化建議
    2024-10-10
  • Java中sleep()與wait()的區(qū)別總結

    Java中sleep()與wait()的區(qū)別總結

    因為最近學習時正好碰到這兩個方法,就查閱相關資料,并通過程序實現(xiàn),進行區(qū)別總結一下,所以下面這篇文章主要給大家總結介紹了關于Java中sleep()與wait()區(qū)別的相關資料,需要的朋友可以參考,下面來一起看看吧。
    2017-05-05
  • java switch語句使用注意的四大細節(jié)

    java switch語句使用注意的四大細節(jié)

    很多朋友在使用java switch語句時,可能沒有注意到一些細節(jié),本文將詳細介紹使用java switch語句四大要點,需要的朋友可以參考下
    2012-12-12

最新評論

长春市| 辽阳市| 金华市| 凤阳县| 南召县| 诸暨市| 屏南县| 修武县| 循化| 金平| 台前县| 揭东县| 库尔勒市| 田东县| 丰原市| 济宁市| 阜阳市| 曲沃县| 武山县| 台东县| 荥经县| 洛南县| 同心县| 建水县| 昆明市| 盐源县| 越西县| 台州市| 永春县| 宿迁市| 明水县| 云阳县| 宁海县| 盐津县| 汶川县| 凌源市| 南丹县| 平定县| 图木舒克市| 阿瓦提县| 寿光市|