1. 程式人生 > 其它 >Linux作業系統安裝 | CentOS

Linux作業系統安裝 | CentOS

1.橋接模式是指:將實現與抽象放在兩個不同的類層次中,使兩個層次可以獨立改變
2.Bridge模式基於類的最小設計原則,通過使用封裝、聚合及繼承等行為讓不同的類承擔不同的職責。他的主要特點是把 抽象與行為實現分離開來,從而可以保持各部分的獨立性以及應對他們的功能擴充套件

橋接模式原理類圖

類圖說明:

1.Client類:橋接模式的呼叫者
2.抽象類(Abstraction):維護了Implement/即他的實現子類ConcreteImpelementorA,
  二者是聚合關係,Abstraction充當橋接類
3.RefinedAbstraction:是Abstraction抽象類的子類
4.Implementor:行為實現類的介面
5.ConcreteImplementorA/B:行為的具體實現類
6.這裡的抽象類和介面是聚合的關係(呼叫和被呼叫的關係)

橋接模式解決手機操作問題

package com.cedric.bridge;

// 介面
public interface Brand {
    void open();
    void close();
    void call();
}

package com.cedric.bridge;

public class Vivo implements Brand{

    @Override
    public void open() {
        System.out.println("Vivo手機開機");
    }

    @Override
    public void close() {
        System.out.println("Vivo手機關機");
    }

    @Override
    public void call() {
        System.out.println("Vivo手機打電話");
    }
}

package com.cedric.bridge;

public class XiaoMi implements Brand{
    @Override
    public void open() {
        System.out.println("小米手機開機");
    }

    @Override
    public void close() {
        System.out.println("小米手機關機");
    }

    @Override
    public void call() {
        System.out.println("小米手機打電話");
    }
}

package com.cedric.bridge;

public abstract class Phone {
    // 組合品牌
    private Brand brand;
    // 構造器
    public Phone(Brand brand){
        this.brand = brand;
    }
    protected void open(){
        this.brand.open();
    }
    protected void close(){
        this.brand.close();
    }
    protected void call(){
        this.brand.call();
    }
}

package com.cedric.bridge;

// 摺疊式手機類,繼承抽象類Phone
public class FoldedPhone extends Phone{

    public FoldedPhone(Brand brand) {
        super(brand);
    }
    public void open(){
        super.open();
        System.out.println("摺疊手機");
    }

    public void close(){
        super.close();
        System.out.println("摺疊手機");
    }

    public void call(){
        super.call();
        System.out.println("摺疊手機");
    }
}

package com.cedric.bridge;

public class UpRightPhone extends Phone{

    public UpRightPhone(Brand brand) {
        super(brand);
    }
    public void open(){
        super.open();
        System.out.println("直立手機");
    }

    public void close(){
        super.close();
        System.out.println("直立手機");
    }

    public void call(){
        super.call();
        System.out.println("直立手機");
    }
}

package com.cedric.bridge;

public class Client {
    public static void main(String[] args) {

        // 獲取摺疊式手機(樣式 + 品牌)

        Phone phone1 = new FoldedPhone(new XiaoMi());

        phone1.open();
        phone1.call();
        phone1.close();
        System.out.println("========================");

        Phone phone2 = new FoldedPhone(new Vivo());
        phone2.open();
        phone2.call();
        phone2.close();

        Phone phone3 = new UpRightPhone(new Vivo());
        phone3.open();
        phone3.call();
        phone3.close();
        System.out.println("========================");
        Phone phone4 = new UpRightPhone(new XiaoMi());
        phone4.open();
        phone4.call();
        phone4.close();
    }
}

橋接模式的注意事項和細節

1.實現了抽象和實現部分的分離,從而極大的提供了系統的靈活性,讓抽象部分和實現部分獨立開來
  這有助於系統進行分層設計,從而產生更好的結構化系統
2.對於系統的高層部分,只需要知道抽象部分和實現部分的介面就可以了,其他的部分由具體的業務來完成
3.橋接模式替代多層繼承方案,可以減少子類的個數,降低系統的管理和維護成本

4.橋接模式的引入增加了系統的理解和設計難度,由於聚合關聯關係建立在抽象層,要求開發者針對抽象進行設計和程式設計
5.橋接模式要求正確識別出系統中兩個獨立變化的維度,因此使用範圍有一定的侷限性,即需要有這樣的引用場景

橋接模式其他應用場景
1.對於那些不希望使用繼承或因為多層次繼承導致系統類的個數急劇增加的系統,橋接模式尤為適用
2.常見的應用場景:
JDBC驅動程式
銀行轉賬系統
訊息管理