天天看點

設計模式-橋梁模式

栗子

定義抽象公司

<code>public abstract class Corp{    // 公司生産内容    protected abstract void produce();    // 銷售    protected abstract void sell();    // 賺錢    public void makeMoney(){        // 生産        this.produce();        // 銷售        this.sell();    } }</code>

上方是模闆方法

下面是房地産公司

<code>public class HouseCorp extends Corp{    // 蓋房子    protected void produce(){        // 蓋房子    }    // 賣房子    protected void sell(){        // 賣房子    }    // 賺錢    public void makeMoney(){        super.makeMoney();        // 賺錢    } }</code>

服裝公司

<code>public class ClothesCorp extends Corp{    // 生産衣服    protected void produce(){        // 生産衣服    }    protected void sell(){        // 出售衣服    }    public void makeMoney(){        super.makeMoney();        // 賺錢    } }</code>

最後編寫場景

<code>public class Client{    public static void main(String[] args){        HouseCorp houseCorp = new HouseCorp();        houseCorp.makeMoney();        ClothesCorp clothesCorp = new ClothesCorp();        clothesCorp.makeMoney();    } }</code>

更改

企業改頭換面,生産另外的産品

山寨公司

<code>public class IPodCorp extends Corp{    // 生産    protected void produce(){        // 生産    }    // 暢銷    protected void sell(){        // 暢銷    }    // 賺錢    public void makeMoney(){        super.makeMoney();        // 賺錢    } }</code>

賺錢

<code>public class Client{    public static void main(String[] args){        // 房地産        HouseCorp houseCorp = new HouseCorp();        // 掙錢        houseCorp.makeMoney();        // 山寨公司        IPodCorp ipodCorp = new IPodCorp();        ipodCorp.makeMoney();    } }</code>

繼續更改

公司和産品分離,讓其之間建立關系

<code>// 抽象産品類public abstract class Product{    // 生産    public abstract void beProducted();    // 銷售    public abstract void beSelled(); }</code>

<code>// 房子public class House extends Product{    // 豆腐渣房子    public void beProducted(){        // 生産    }    // 銷售    public void beSelled(){        // 銷售    } }</code>

繼續

<code>public class IPod extends Product{    public void beProducted(){        // 生産    }    public void beSelled(){        // 銷售    } }</code>

下面是抽象公司類

<code>public abstract class Corp{    // 定義抽象産品對象    private Product product;    // 構造函數    public Corp(Product product){        this.product = product;    }    // 公司賺錢    public void makeMoney(){        // 生産        this.product.beProducted();        // 銷售        this.product.beSelled();    } }</code>

定義房地産公司

<code>public class HouseCorp extends Corp{    // 定義House産品    public HouseCorp(House house){        super(house);    }    // 賺錢    public void makeMoney(){        super.makeMoney();        // 賺錢    } }</code>

<code>public class ShanZhaiCorp extends Corp{    // 産品    public ShanZhaiCorp(Product product){        super(product);    }    // 賺錢    public void makeMoney(){        super.makeMoney();        // 賺錢    } }</code>

最後書寫場景

<code>public class Client{    public static void main(String[] args){        House house = new House();        // 房地産公司        HouseCorp houseCorp = new HouseCorp(house);        // 賺錢        houseCorp.makeMoney();        // 生産産品        ShanZhaiCorp shanZhaiCorp = new ShanZhaiCorp(new IPod());        ShanZhaiCorp.makeMoney();    } }</code>

此時在目前狀态下,若要生産服裝,隻需要繼承Product類,定義一個服裝類即可

<code>public class Clothes extends Product{    public void beProducted(){        // 生産服裝    }    public void beSelled(){        // 賣衣服    } }</code>

最後書寫場景類

<code>public class Client{    public static void main(String[] args){        House house = new House();        // 房地産公司        HouseCorp houseCorp = new HouseCorp(house);        // 掙錢        houseCorp.makeMoney();        // 山寨公司生産        ShanZhaiCorp.shanZhaiCorp = new ShanZhaiCorp(new Clothes());        ShanZhai.makeMoney();    } }</code>

總結

橋梁模式,抽象和實作解耦,需要的時候,将實作注入抽象。