Android开发经验谈Android开发Android技术知识

Android 设计模式之桥接模式

2017-10-30  本文已影响423人  AntDream

在日常开发过程中时常需要用到设计模式,但是设计模式有23种,如何将这些设计模式了然于胸并且能在实际开发过程中应用得得心应手呢?和我一起跟着《Android源码设计模式解析与实战》一书边学边应用吧!

设计模式系列文章

今天我们要讲的是桥接模式(Bridge Pattern)


定义

将抽象部分与实现部分分离,使它们都可以独立地变化

使用场景

使用例子


实现

4大角色

实现的要点

实现方式

这里我们通过泡咖啡的例子来简单看看桥接模式的实现和应用

public abstract class Coffee {
    protected CoffeeAdditives impl;

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

    /**
     * 咖啡具体是什么样的由子类决定
     */
    public abstract void makeCoffee();
}
//大杯咖啡
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则不受影响。如果咖啡需要加盐或是其他什么的同样也很简单。

总结


              欢迎关注我的微信公众号,期待与你一起学习,一起交流,一起成长!
AntDream
上一篇下一篇

猜你喜欢

热点阅读