Java设计模式 —— 桥接模式(Bridge)

Java设计模式 —— 桥接模式(Bridge)

定义

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

特征:

  1. 三个关键词,也就是抽象化、实现化和脱耦
  2. 桥接模式将抽象部分和实现部分分离,解耦
  3. 两个维度,独立变化,灵活的扩展

代码实现

简书:Android 设计模式之桥接模式

  • 这里我们通过泡咖啡的例子来简单看看桥接模式的实现和应用
public abstract class Coffee {
    protected CoffeeAdditives impl;

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

    /**
     * 咖啡具体是什么样的由子类决定
     */
    public abstract void makeCoffee();
}
  • 咖啡的子类,大杯和小杯,加不加糖的操作通过impl添加进来
//大杯咖啡
public class LargeCoffee extends Coffee {

    public LargeCoffee(CoffeeAdditives coffeeAdditives) {
        super(coffeeAdditives);
    }

    @Override
    public void makeCoffee() {
        System.out.println("大杯的" + impl.addSomething() + "咖啡");
    }
}
//小杯咖啡
public class SmallCoffee extends Coffee {

    public SmallCoffee(CoffeeAdditives coffeeAdditives) {
        super(coffeeAdditives);
    }

    @Override
    public void makeCoffee() {
        System.out.println("小杯的" + impl.addSomething() + "咖啡");
    }
}
  • 下面我们看看实现部分,也就是加不加糖
public abstract class CoffeeAdditives {

    /**
     * 具体添加什么东西由子类决定
     *
     * @return 添加的东西,比如加糖
     */
    public abstract String addSomething();
}
  • 加糖和不加糖的子类
//加糖
public class Sugar extends CoffeeAdditives {

    @Override
    public String addSomething() {
        return "加糖";
    }
}
//不加糖,这里就是原味了
public class Ordinary extends CoffeeAdditives {

    @Override
    public String addSomething() {
        return "原味";
    }
}
  • 以上抽象部分和实现部分都完成了,现在我们来看看怎么“泡咖啡”
//原味
Ordinary ordinary = new Ordinary();

//加糖
Sugar sugar = new Sugar();

//大杯咖啡,原味
LargeCoffee largeCoffee = new LargeCoffee(ordinary);
largeCoffee.makeCoffee();

//小杯咖啡,原味
SmallCoffee smallCoffee = new SmallCoffee(ordinary);
smallCoffee.makeCoffee();

//大杯咖啡,加糖
LargeCoffee largeCoffeeSugar = new LargeCoffee(sugar);
largeCoffeeSugar.makeCoffee();

//小杯咖啡,加糖
SmallCoffee smallCoffeeSugar = new SmallCoffee(sugar);
smallCoffeeSugar.makeCoffee();
  • 输出日志

大杯的原味咖啡
小杯的原味咖啡
大杯的加糖咖啡
小杯的加糖咖啡

通过以上的例子我们可以看出桥接模式能够分离抽象与实现,而且扩展也很灵活。比如我们需要添加个中杯的咖啡,只需要在抽象部分,也就是写个Coffee的子类MiddleCoffee就行了,而实现部分,CoffeeAdditives则不受影响。如果咖啡需要加盐或是其他什么的同样也很简单。

外观模式使用问题

优点:
1、抽象和实现的分离。
2、优秀的扩展能力。
3、实现细节对客户透明。

缺点:桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。

Android中外观模式

AbsListView跟ListAdapter之间就是一个桥接模式。
Java设计模式 —— 桥接模式(Bridge)_第1张图片
另外,Window 与 WindowManager 之间也是桥接模式。

感谢

segmentfault: 桥接模式
菜鸟教程:桥接模式
百度百科:桥接模式
博客园:《JAVA与模式》之桥梁模式
简书:Android 设计模式之桥接模式

你可能感兴趣的:(Java)