<<設(shè)計(jì)模式之禪(第二版)>>——第二十九章 橋梁模式

定義
  • 也叫做橋接模式,將抽象和實(shí)現(xiàn)解耦,使得兩者可以獨(dú)立的變化。(抽象角色引用實(shí)現(xiàn)角色,或者說(shuō)抽象角色的部分實(shí)現(xiàn)是由實(shí)現(xiàn)角色完成的。)
通用類圖:
橋梁設(shè)計(jì)模式通用類圖
/*
 * 實(shí)現(xiàn)化角色
 * */
public interface Implementor {
  // 定義基本方法
  public void doSomething();

  public void doAnything();
}
public class ConcreteImplementorOne implements Implementor {

  @Override
  public void doSomething() {
    // TODO Auto-generated method stub

  }

  @Override
  public void doAnything() {
    // TODO Auto-generated method stub

  }

}
public class ConcreteImplementorTwo implements Implementor {

  @Override
  public void doSomething() {
    // TODO Auto-generated method stub

  }

  @Override
  public void doAnything() {
    // TODO Auto-generated method stub

  }

}

public abstract class Abstraction {
  // 定義對(duì)實(shí)現(xiàn)化角色的引用
  private Implementor imp;

  public Abstraction(Implementor _imp) {// 約束子類必須實(shí)現(xiàn)該構(gòu)造函數(shù)
    this.imp = _imp;
  }

  // 自身行為和屬性
  public void request() {
    this.imp.doSomething();
  }

  // 獲得實(shí)例化角色
  public Implementor getImp() {
    return this.imp;
  }
}
public class RefinedAbstraction extends Abstraction {
  // 覆寫構(gòu)造函數(shù)
  public RefinedAbstraction(Implementor _imp) {
    super(_imp);
    // TODO Auto-generated constructor stub
  }

  // 修正父類的行為
  @Override
  public void request() {
    // TODO Auto-generated method stub

    /*
     * 業(yè)務(wù)處理
     */

    super.request();
    super.getImp().doAnything();
  }

}

public class Client {
  public static void main(String[] args) {
    // 定義一個(gè)實(shí)現(xiàn)化角色
    Implementor imp = new ConcreteImplementorOne();
    // 定義一個(gè)抽象化角色
    Abstraction abs = new RefinedAbstraction(imp);

    abs.request();
  }
}
優(yōu)點(diǎn):
  • 抽象和實(shí)現(xiàn)分離:實(shí)現(xiàn)可以不受到抽象的約束,不用再綁定在一個(gè)固定的抽象層次上,是為了解決繼承的缺點(diǎn)而提出的設(shè)計(jì)模式。
  • 優(yōu)秀的拓展能力
  • 實(shí)現(xiàn)細(xì)節(jié)對(duì)客戶透明:客戶不關(guān)心細(xì)節(jié)的實(shí)現(xiàn),它已經(jīng)由抽象層通過聚合關(guān)系完成了封裝
使用場(chǎng)景:
  • 通過繼承層次過渡、無(wú)法更細(xì)化設(shè)計(jì)顆粒等場(chǎng)景
  • 接口或抽象類不穩(wěn)定的場(chǎng)景
  • 重用性要求較高的場(chǎng)景,設(shè)計(jì)的顆粒度越細(xì),則被重用的可能性就越大,而采用繼承則受到父類的限制,不可能出現(xiàn)太細(xì)的顆粒度
注意事項(xiàng):
  • 橋梁模式的意圖是對(duì)變化的封裝,盡可能把變化的原因封裝到最細(xì)、最小的邏輯單元中,避免風(fēng)險(xiǎn)的擴(kuò)散。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 設(shè)計(jì)模式匯總 一、基礎(chǔ)知識(shí) 1. 設(shè)計(jì)模式概述 定義:設(shè)計(jì)模式(Design Pattern)是一套被反復(fù)使用、多...
    MinoyJet閱讀 4,083評(píng)論 1 15
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,996評(píng)論 25 709
  • 設(shè)計(jì)模式基本原則 開放-封閉原則(OCP),是說(shuō)軟件實(shí)體(類、模塊、函數(shù)等等)應(yīng)該可以拓展,但是不可修改。開-閉原...
    西山薄涼閱讀 4,080評(píng)論 3 14
  • 本書記者 : 作者卡勒德·胡賽尼的第一部小說(shuō),于2003年出版。這也是第一部來(lái)自阿富汗的作家出版的英文小說(shuō)?!蹲凤L(fēng)...
    CORENE閱讀 697評(píng)論 7 4
  • 本周二的英語(yǔ)角單位請(qǐng)了清華的一位英語(yǔ)老師,那位老師主要推薦了她們自己制作的一個(gè)網(wǎng)絡(luò)課程,結(jié)合她自身的實(shí)際講述了如何...
    stone_thinker閱讀 958評(píng)論 2 5

友情鏈接更多精彩內(nèi)容