桥接模式

将抽象和实现解耦,使得两者可以独立的 变化。(我理解的是一个抽象类中,把它组成中容易变化的部分单独分离出来)

模式使用场景

  1. 如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的继承联系,通过桥接模式可以使它们在抽象层建立一个关联关系。
  2. 对于那些不希望使用继承或因为多层次继承导致系统类的个数急剧增加的系统,桥接模式很合适。
  3. 一个类存在两个独立变化的维度,且这两个维度都需要进行扩展。

uml图:
桥接模式_第1张图片
举一个例子,举一个卖茶水的例子。
茶水的杯子规格:大杯,小杯。
茶水的种类:红茶,绿茶。
代码实现如下:

package bridge;

public interface TeaKind {
    public void kind(String size);
}
package bridge;

public abstract class TeaSize {
     TeaKind teaKind;

    public void setTeaKind(TeaKind teaKind) {
        this.teaKind = teaKind;
    }

    public abstract void getKind();
}

package bridge;

public class GreenTea implements TeaKind {
    @Override
    public void kind(String size){
        System.out.println("绿茶"+size);
    }
}

package bridge;

public class RedTea implements TeaKind{
    @Override
    public void kind(String size){
        System.out.println("红茶"+size);
    }
}

package bridge;

public class MediumCup extends TeaSize {
    @Override
    public void getKind() {
        teaKind.kind("中杯");
    }
}
package bridge;

public class SuperCup extends TeaSize {
    @Override
    public void getKind() {
        teaKind.kind("大杯");
    }
}

package bridge;

public class Test {
    public static void main(String[] args) {
        MediumCup mediumCup = new MediumCup();
        RedTea redTea =new RedTea();
        mediumCup.setTeaKind(redTea);
        mediumCup.getKind();

        SuperCup superCup=new SuperCup();
        superCup.setTeaKind(redTea);
        superCup.getKind();
    }

}

输出:

红茶中杯
红茶大杯

继承是一种强耦合关系,子类与父类有非常紧密的依赖关系,父类的任何变化 都会导致子类发生变化。因此才使用桥接模式,使用了桥接模式之后,我们的两个维度就像桥梁一样被链接了起来。体现了松耦合的特性。

你可能感兴趣的:(桥接模式)