天天看点

设计模式-桥梁模式

栗子

定义抽象公司

<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>

总结

桥梁模式,抽象和实现解耦,需要的时候,将实现注入抽象。