设计模式--桥接模式

BRIDGE?早上碰到MM,要说早上好,晚上碰到MM,要说晚上好;碰到MM穿了件新衣服,要说你的衣服好漂亮哦,碰到MM新做的发型,要说你的头发好漂亮哦。不要问我“早上碰到MM新做了个发型怎么说”这种问题,自己用BRIDGE组合一下不就行了   桥梁模式:将抽象化与实现化脱耦,使得二者可以独立的变化,也就是说将他们之间的强关联变成弱关联,也就是指在一个软件系统的抽象化和实现化之间使用组合/聚合关系而不是继承关系,从而使两者可以独立的变化。  

也就是说:将抽象和行为划分开来,各自独立,但能动态的结合.

接下来以杯子和液体来举例:

杯子有大杯子,也有小杯子;

液体这里以牛奶和水举例:

牛奶既可以放入大杯子,也可放入小杯子,水也一样。

首先定义液体类:

public abstract class Liquid {
    void fillwith(){};
}

然后定义杯子类:

public abstract class Tazas {
    Liquid liquid;
    void fillWidth(){

    }
}

大杯子类:

public class BigTazas extends Tazas{
    @Override
    void fillWidth() {
        super.fillWidth();
        liquid.fillwith();
        System.out.println("大杯子");
    }
}

小杯子类:

public class SmallTazas extends Tazas{
    @Override
    void fillWidth() {
        super.fillWidth();
        liquid.fillwith();
        System.out.println("小杯子");
    }
}

牛奶类:

public class Milk extends Liquid {
    @Override
    void fillwith() {
        // TODO Auto-generated method stub

        super.fillwith();
        System.out.println("牛奶放入");
    }
}

水类:

public class Water extends Liquid {
    @Override
    void fillwith() {
        // TODO Auto-generated method stub
        super.fillwith();
        System.out.println("水放入");
    }
}

测试的类:

public class Main {

    public static void main(String[] args) {
        Tazas tazas = new BigTazas();  
        tazas.liquid = new Water();  
        tazas.fillWidth();  
        System.out.println("------------");
        Tazas tazas1 = new SmallTazas();  
        tazas1.liquid = new Milk();  
        tazas1.fillWidth();  
        System.out.println("------------");
        Tazas tazas2 = new SmallTazas();  
        tazas2.liquid = new Water();  
        tazas2.fillWidth();  
        System.out.println("------------");
        Tazas tazas3 = new BigTazas();  
        tazas3.liquid = new Milk();  
        tazas3.fillWidth();  
    }

}

运行结果:

  水放入

  大杯子

------------
牛奶放入
小杯子
------------
水放入
小杯子
------------
牛奶放入大杯子
原文地址:https://www.cnblogs.com/androidsuperman/p/4440100.html