美文网首页
桥接模式(不只改变你的实现,也改变你的抽象)

桥接模式(不只改变你的实现,也改变你的抽象)

作者: 钉某人 | 来源:发表于2017-11-18 15:13 被阅读0次
源码地址 https://github.com/DingMouRen/DesignPattern
桥接模式.png
  • Abstraction定义抽象部分的接口,该类保持一个对实现部分对象的引用,抽象部分中的方法需要条用实现部分的对象来实现。
  • RefinedAbstraction扩充由Abstraction定义的接口,相当于优化
  • Implementor定义实现部分的接口,该接口不一定要与Abstraction的接口完全一致,事实上这两个接口可以完全不同。一般来说,Implementor接口仅提供基本操作,而Abstraction则定义基于这些基本操作的较高层次的操作。
  • ConcreteImplementorA、ComcreteImplementorB实现Implementor接口并定义它的具体实现。
定义

桥接模式将抽象部分与实现部分分离,使他们都可以独立的进行变化。

使用场景
举个栗子

注意:这里的抽象部分和实现部分只是两个独立变化的维度,独立变化。

我们平常喝咖啡的时候分别有大杯小杯的,还有加糖和不加糖的,这两种变化时独立变化的,互不影响。我们把大杯小杯作为抽象部分,加不加糖作为实现部分。

//抽象部分
public abstract class Coffee {
    protected CoffeeAdditives coffeeAdditives;//持有CoffeeAdditives的引用,方便调用它的具体实现

    public Coffee(CoffeeAdditives coffeeAdditives) {
        this.coffeeAdditives = coffeeAdditives;
    }

    //具体的咖啡由子类去具体实现,这里就定义一个抽象方法
    public abstract void makeCoffee();
}
//大杯咖啡
public class LargeCoffee extends Coffee{
    public LargeCoffee(CoffeeAdditives coffeeAdditives) {
        super(coffeeAdditives);
    }

    @Override
    public void makeCoffee() {
        System.out.println(getClass().getSimpleName()+":大杯的"+coffeeAdditives.addSomething()+"咖啡");
    }
}

//实现部分,加糖不加糖的抽象
public abstract class CoffeeAdditives {
    //加入咖啡的具体作料由子类来指定
    public abstract String addSomething();
}
//加糖
public class Sugar extends CoffeeAdditives {
    @Override
    public String addSomething() {
        return "加糖的";
    }
}

使用
    public static void main(String[] args) {
        //准备糖 和 原味的
        Sugar sugar = new Sugar();
        Odinary odinary = new Odinary();
        //下面分别做四种咖啡:大杯原味 小杯原味  大杯加糖  小杯加糖
        LargeCoffee largeCoffeeOdinary = new LargeCoffee(odinary);
        largeCoffeeOdinary.makeCoffee();

        SmallCoffee smallCoffeeOdinary = new SmallCoffee(odinary);
        smallCoffeeOdinary.makeCoffee();

        LargeCoffee largeCoffeeSugar = new LargeCoffee(sugar);
        largeCoffeeSugar.makeCoffee();

        SmallCoffee smallCoffeeSugar = new SmallCoffee(sugar);
        smallCoffeeSugar.makeCoffee();
    }
总结

桥接模式应用的不多,关键在于对抽象与实现的分离。优点是很好的,分析抽象与实现、灵活的扩展以及对客户来说透明的实现,但是不容易设计哦。

相关文章

  • 桥接模式(Bridge Pattern)

    桥接模式:使用桥接模式不只改变你的实现,也改变你的抽象。 桥接模式是将抽象和实现分离,使他们能够各自独立的变化。 ...

  • 桥接模式

    使用桥接模式不只改变你的实现,也改变你的抽象。 示例—遥控器 有很多遥控器,可以控制不同的电视。实现遥控器与电视之...

  • 桥接模式(不只改变你的实现,也改变你的抽象)

    Abstraction定义抽象部分的接口,该类保持一个对实现部分对象的引用,抽象部分中的方法需要条用实现部分的对象...

  • 设计模式之桥接模式(结构型)

    @[toc] 模式定义 桥接模式(Bridge Pattern)是将抽象部分和实现部分分离,使它们可以独立地改变,...

  • Head First 设计模式(14)其他模式

    桥接模式 通过将实现和抽象放在两个不同的类层次中而使它们可以独立改变 左边是抽象类,右边是实现类 生成器模式 使用...

  • 结构型之二-桥模式

    Bridge(桥模式) 把抽象层次结构从其实现中分离出来,使其能够独立改变。抽象层定义了提供客户端使用的上层抽象接...

  • 其余模式

    桥接模式:将实现和抽象放在两个不同的类层次中,使它们可以独立改变。实现和抽象解耦,不再永久绑定。 缺点:增加了复杂...

  • iOS 桥接模式

    桥接模式抽象出层次结构。上层抽象接口的职能,实现上层抽象接口的职能,层级间的通信协议(可以抽象为接口)。桥接模式的...

  • Android中的桥接模式

    桥接模式的常见定义是抽象和实现的分离,实现抽象和实现的自由变化,在我看来,桥接模式的根本是实现同一个类或者...

  • iOS设计模式之桥接模式

    桥接模式 1、什么是桥接模式 将抽象部分与实现部分分离,使它们都可以独立的变化。 桥接模式一共有两个角色: 抽象角...

网友评论

      本文标题:桥接模式(不只改变你的实现,也改变你的抽象)

      本文链接:https://www.haomeiwen.com/subject/nqievxtx.html