欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java設(shè)計模式之委派模式原理分析

 更新時間:2019年10月17日 14:15:27   作者:桂長江  
這篇文章主要介紹了java設(shè)計模式之委派模式原理分析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

委派模式(Delegate)原理:

類B和類A是兩個互相沒有任何關(guān)系的類,但是B具有和A一模一樣的方法和屬性;并且調(diào)用B中的方法/屬性就是調(diào)用A中同名的方法和屬性。

B好像就是一個受A授權(quán)委托的中介,第三方的代碼不需要知道A的存在,也不需要和A發(fā)生直接的聯(lián)系,通過B就可以直接使用A的功能,這樣既能夠使用到A的各種公能,又能夠很好的將A保護起來。

委派模式使得我們可以用聚合來代替繼承,看如下代碼:

// 類模擬打印機Printer擁有針式打印機RealPrinter的實例
//Printer擁有的方法print()將處理轉(zhuǎn)交給RealPrinter的print()方法
package Paint;

class RealPrinter { 
  void print() {
    System.out.print("something");
  }
}

class Printer { 
  RealPrinter p = new RealPrinter(); // 委派
  void print() {
    p.print();
  }
}

public class Main {
  public static void main(String[] args) {
    Printer printer = new Printer();
    printer.print();
  }
}

執(zhí)行結(jié)果

看代碼,比較容易理解,這是一個特別簡單的委派設(shè)計模式。如果可以使用接口,那委派可以做到類型更安全并且更加靈活。我們看下面這個例子:

/***在這個例子里,類C可以委托類A或類B,類C擁有方法使自己可以在類A或類B間選擇。因為類A或類B必須實現(xiàn)接口I規(guī)定的方法,所以在這里委托是類型安全的。**/
package Paint;

interface I {
  void f();
  void g();
}

class A implements I {
  public void f() {
    System.out.println("A: doing f()");
  }
  public void g() {
    System.out.println("A: doing g()");
  }
}

class B implements I {
  public void f() {
    System.out.println("B: doing f()");
  }
  public void g() {
    System.out.println("B: doing g()");
  }
}

class C implements I {
  I i = new A();
  public void f() {
    i.f();
  }
  public void g() {
    i.g();
  }
  public void toA() {
    i = new A();
  }
  public void toB() {
    i = new B();
  }
}

public class Main {
  public static void main(String[] args) {
    C c = new C();
    c.f();   // output: A: doing f()
    c.g();   // output: A: doing g()
    c.toB();  // 更換委托對象
    c.f();   // output: B: doing f()
    c.g();   // output: B: doing g()
  }
}

委托的缺點:代碼量大,類更多。

----- delegate委派模式和Proxy代理模式 -----

Proxy :譯為代理, 被代理方(B)與代理方(A)的接口完全一致。

主要使用場景:為簡化編程(或無法操作B)而把請求交給代理方(A),由代理方與被代理方進行通信,以完成請求。

Delegete : 譯為委托

主要使用場景:一件事情(或一個請求)對象本身不知道怎樣處理,對象把請求交給其它對象來做。

簡單來講,可以這么理解,代理是若干個對象實現(xiàn)了一個共同的接口,而委派只是說明一個對象引用了另一個對象,并不牽扯接口。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • java datetime數(shù)據(jù)類型去掉時分秒的案例詳解

    java datetime數(shù)據(jù)類型去掉時分秒的案例詳解

    在Java中,如果我們想要表示一個日期而不包括時間(時分秒),我們通常會使用java.time包中的LocalDate類,這篇文章主要介紹了java datetime數(shù)據(jù)類型去掉時分秒,需要的朋友可以參考下
    2024-06-06
  • SpringBoot中如何進行統(tǒng)一異常處理

    SpringBoot中如何進行統(tǒng)一異常處理

    大家好,本篇文章主要講的是SpringBoot中如何進行統(tǒng)一異常處理,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-02-02
  • Java的Cglib動態(tài)代理實現(xiàn)方式詳解

    Java的Cglib動態(tài)代理實現(xiàn)方式詳解

    這篇文章主要介紹了Java的Cglib動態(tài)代理實現(xiàn)方式詳解,CGLIB是強大的、高性能的代碼生成庫,被廣泛應(yīng)用于AOP框架,它底層使用ASM來操作字節(jié)碼生成新的類,為對象引入間接級別,以控制對象的訪問,需要的朋友可以參考下
    2023-11-11
  • Java實現(xiàn)優(yōu)先隊列式廣度優(yōu)先搜索算法的示例代碼

    Java實現(xiàn)優(yōu)先隊列式廣度優(yōu)先搜索算法的示例代碼

    這篇文章主要為大家詳細(xì)介紹了Java如何實現(xiàn)優(yōu)先隊列式廣度優(yōu)先搜索算法,文中通過一個示例帶大家具體了解了實現(xiàn)的方法,需要的可以參考一下
    2022-08-08
  • Java?split方法使用超詳細(xì)講解

    Java?split方法使用超詳細(xì)講解

    這篇文章主要給大家介紹了關(guān)于Java?split方法使用的相關(guān)資料,Java中的我們可以利用split把字符串按照指定的分割符進行分割,然后返回字符串?dāng)?shù)組,需要的朋友可以參考下
    2023-10-10
  • Java?泛型考古?泛型擦除?包裝類詳細(xì)解析

    Java?泛型考古?泛型擦除?包裝類詳細(xì)解析

    泛型是在Java?SE?1.5引入的的新特性,本質(zhì)是參數(shù)化類型,也就是說所操作的數(shù)據(jù)類型被指定為一個參數(shù)。這種參數(shù)類型可以用在類、接口和方法的創(chuàng)建中,分別稱為泛型類、泛型接口、泛型方法,本篇我們一起來學(xué)習(xí)泛型考古、泛型擦除、包裝類
    2022-03-03
  • java設(shè)計模式理解依賴于抽象不依賴具體的分析

    java設(shè)計模式理解依賴于抽象不依賴具體的分析

    這篇文章主要為大家介紹了java設(shè)計模式的規(guī)則,理解依賴于抽象不依賴具體的示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-10-10
  • 詳解spring boot應(yīng)用啟動原理分析

    詳解spring boot應(yīng)用啟動原理分析

    這篇文章主要介紹了詳解spring boot應(yīng)用啟動原理分析,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06
  • IDEA2020 Plugins不能用的解決辦法及Plugins 搜索不了插件的問題

    IDEA2020 Plugins不能用的解決辦法及Plugins 搜索不了插件的問題

    這篇文章主要介紹了IDEA2020 Plugins不能用的解決辦法,文中給大家介紹了Intellij IDEA 2020.1 的Plugins 搜索不了插件,連接超時的問題,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2020-06-06
  • 解決Java字符串JSON轉(zhuǎn)換異常:cn.hutool.json.JSONException:?Mismatched?hr?and?body

    解決Java字符串JSON轉(zhuǎn)換異常:cn.hutool.json.JSONException:?Mismatched?

    這篇文章主要給大家介紹了關(guān)于如何解決Java字符串JSON轉(zhuǎn)換異常:cn.hutool.json.JSONException:?Mismatched?hr?and?body的相關(guān)資料,文中將解決的辦法通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01

最新評論