中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java設計模式之委派模式如何實現

發布時間:2021-08-07 14:08:50 來源:億速云 閱讀:128 作者:小新 欄目:編程語言

這篇文章給大家分享的是有關java設計模式之委派模式如何實現的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

委派模式(Delegate)原理:

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

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

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

// 類模擬打印機Printer擁有針式打印機RealPrinter的實例
//Printer擁有的方法print()將處理轉交給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();
  }
}

java設計模式之委派模式如何實現

執行結果

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

/***在這個例子里,類C可以委托類A或類B,類C擁有方法使自己可以在類A或類B間選擇。因為類A或類B必須實現接口I規定的方法,所以在這里委托是類型安全的。**/
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 : 譯為委托

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

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

感謝各位的閱讀!關于“java設計模式之委派模式如何實現”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

霍邱县| 教育| 和田县| 安义县| 黑水县| 仪陇县| 南华县| 平邑县| 巩留县| 府谷县| 安达市| 房山区| 江北区| 会理县| 客服| 南康市| 察雅县| 肇源县| 确山县| 周至县| 盈江县| 阳曲县| 太谷县| 扬州市| 石首市| 临颍县| 尤溪县| 扶余县| 灌云县| 绥棱县| 镇安县| 陆河县| 建阳市| 玉树县| 沾化县| 梅河口市| 文化| 昌乐县| 乌海市| 潍坊市| 遂溪县|