《Android源碼設計模式解析與實戰(zhàn)》讀書筆記-橋接模式分析

介紹和介紹

橋接模式也成為橋梁模式,是將抽象部分和實現(xiàn)部分分離,使他們可以獨立地進行變化。

簡單實現(xiàn)

  • 實現(xiàn)部分的抽象接口
public interface Implementor {

    /**
     * 抽象部分的具體方法
     */
    void operationImpl();

}
  • 實現(xiàn)部分的具體的實現(xiàn)A
public class ImplementorA implements Implementor {
    @Override
    public void operationImpl() {
        //具體實現(xiàn)A
    }
}
  • 實現(xiàn)部分具體的實現(xiàn)B
public class ImplementorB implements Implementor {
    @Override
    public void operationImpl() {
        //具體實現(xiàn)B
    }
}
  • 抽象類
public abstract class Abstraction {

    Implementor implementor;

    public Abstraction(Implementor implementor) {
        this.implementor = implementor;
    }

    //抽象類的功能
    public void operation(){
        implementor.operationImpl();
    }
}
  • 抽象類子類
public class RefinedAbstration extends Abstraction {
    public RefinedAbstration(Implementor implementor) {
        super(implementor);
    }

    /**
     * 對父類方法的擴展
     */
    public void refinedOperation(){

    }
}

實例

現(xiàn)在有四種咖啡, 大杯加糖,大杯原味,小杯不加糖,小杯原味。本質上講,一共有兩種變化,大小杯+是否加糖。

  • 首先定義一個抽象類表示咖啡內添加物
public abstract class CoffeeAdditives {

    /**
     * 由子類決定添加何種添加物
     * @return
     */
    abstract String add();

}
  • 集成抽象類,實現(xiàn)具體方法

    • 原味
    public class Ordinary extends CoffeeAdditives {
        @Override
        String add() {
            return "原味";
        }
    }
    
    • 加糖
    public class Sugar extends CoffeeAdditives {
        @Override
        String add() {
            return "加糖";
        }
    }
    
  • 定義一個咖啡類

public abstract class Coffee {
    protected  CoffeeAdditives coffeeAdditives;

    public Coffee(CoffeeAdditives coffeeAdditives) {
        this.coffeeAdditives = coffeeAdditives;
    }
    
    /**
     * 具體制作過程由子類決定
     */
    public abstract void makeCoffee();
}
  • 定義兩個子類

    • 大杯
    public class LargeCoffee extends Coffee{
        public LargeCoffee(CoffeeAdditives coffeeAdditives) {
            super(coffeeAdditives);
        }
    
        @Override
        public void makeCoffee() {
            //大杯制作,并由 coffeeAdditives 決定加料
        }
    }
    
    • 小杯
    public class SmallCoffee extends Coffee{
        public LargeCoffee(CoffeeAdditives coffeeAdditives) {
            super(coffeeAdditives);
        }
    
        @Override
        public void makeCoffee() {
            //小杯制作,并由 coffeeAdditives 決定加料
        }
    }
    
  • 客戶端類

public class Main {

    public static void main(String[] args) {
        Ordinary ordinary = new Ordinary();
        Sugar sugar = new Sugar();

        LargeCoffee largeCoffee1 = new LargeCoffee(ordinary);
        LargeCoffee largeCoffee2 = new LargeCoffee(sugar);
        
        SmallCoffee smallCoffee1 = new SmallCoffee(ordinary);
        SmallCoffee smallCoffee2 = new SmallCoffee(sugar);

    }

}

這樣一個簡單的橋接模式應用就完成了。如果再增加一種中杯咖啡,只要再擴展一個 MiddleCoffee 子類就可以了。

使用場景

多維度變化類或者說多個樹狀類之間的耦合就可以使用橋接模式來實現(xiàn)解耦。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 1 場景問題# 1.1 發(fā)送提示消息## 考慮這樣一個實際的業(yè)務功能:發(fā)送提示消息?;旧纤袔I(yè)務流程處理的系統(tǒng)...
    七寸知架構閱讀 5,217評論 5 63
  • 定義 定義一個用于創(chuàng)建對象的接口,讓子類決定實例化哪個類。 使用場景 任何需要生成復雜對象的地方都可以使用工廠方法...
    某翼閱讀 298評論 0 1
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評論 19 139
  • 面向對象的六大原則 單一職責原則 所謂職責是指類變化的原因。如果一個類有多于一個的動機被改變,那么這個類就具有多于...
    JxMY閱讀 1,017評論 1 3
  • 多態(tài) 任何域的訪問操作都將有編譯器解析,如果某個方法是靜態(tài)的,它的行為就不具有多態(tài)性 java默認對象的銷毀順序與...
    yueyue_projects閱讀 1,088評論 0 1

友情鏈接更多精彩內容