天天看點

Java橋接模式(bridge)

文章目錄

   橋接模式

       1.多層繼承結構

           1.1擴充性問題

           1.2違反單一職責原則

       2.橋接模式實作

           2.1場景分析

           2.2橋接模式核心要點:

       3.代碼實作

       4.橋接模式總結

 本文介紹下Java設計模式中的橋接模式

橋接模式

1.多層繼承結構

 在現實生活中比如商城中以電腦為例來說,如何處理電腦銷售分類的問題,我們可以使用多層繼承結構實作這種場景

Java橋接模式(bridge)

問題

1.1擴充性問題

1>. 如果要增加一個新的擴充類型:智能手機,則要在每個品牌下增加一個新類

2>. 如果要新增加一個品牌,則這個品牌下要增加各個類型的電腦

1.2違反單一職責原則

一個類有兩個引起該類變化的因素。

2.橋接模式實作

2.1場景分析

   商城系統中常見的商品分類,以電腦為類,如何良好的處理商品分類銷售的問題?

   這個場景中有兩個變化的次元:電腦類型、電腦品牌 這個場景中有兩個變化的次元:電腦類型、電腦品牌

Java橋接模式(bridge)

2.2橋接模式核心要點:

 處理多層繼承結構,處理多元度變化的場景,将各個次元設計成獨立的繼承結構,使各個次元可以獨立的擴充在抽象層建立關聯。

Java橋接模式(bridge)

3.代碼實作

品牌類

/**
 * 品牌
 * @author Administrator
 *
 */
public interface Brand {
    void sale();
}

class Lenovo implements Brand {

    @Override
    public void sale() {
        System.out.println("銷售聯想電腦");
    }
    
}

class Dell implements Brand {
    
    @Override
    public void sale() {
        System.out.println("銷售Dell電腦");
    }
    
}

class Shenzhou implements Brand {
    
    @Override
    public void sale() {
        System.out.println("銷售神舟電腦");
    }
    
}      

電腦次元,也就是橋接類

/**
 * 電腦類型的次元
 * @author Administrator
 *
 */
public class Computer2 {
    
    protected Brand brand;
    
    public Computer2(Brand b) {
        this.brand = b;
    }
    
    public void sale(){
        brand.sale();
    }
    
}

class Desktop2 extends Computer2 {

    public Desktop2(Brand b) {
        super(b);
    }
    
    @Override
    public void sale() {
        super.sale();
        System.out.println("銷售桌上型電腦");
    }
}

class Laptop2 extends Computer2 {
    
    public Laptop2(Brand b) {
        super(b);
    }
    
    @Override
    public void sale() {
        super.sale();
        System.out.println("銷售筆記本");
    }
}
      

測試類

public class Client {
    public static void main(String[] args) {
        //銷售聯想的筆記本電腦
        Computer2  c = new Laptop2(new Lenovo());
        c.sale();
        //銷售神舟的桌上型電腦
        Computer2 c2 = new Desktop2(new Shenzhou());
        c2.sale();
    }
}      

4.橋接模式總結

   橋接模式可以取代多層繼承的方案。 多層繼承違背了單一職責原則,複用性較差,類的個數也非常多。橋接模式可以極大的減少子類的個數,進而降低管理和維護的成本。

   橋接模式極大的提高了系統可擴充性,在兩個變化次元中任意擴充一個次元,都不需要修改原有的系統,符合開閉原則。

Java橋接模式(bridge)