连接两地的交通枢纽——桥接模式

1、桥连接模式的定义

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

2、桥连接模式的使用场景

        简单说就是一个类存在两份独立变化的维度,且这两个维度都需要进行扩展。

3、桥连接模式的图解

        ps:现实中有的人喜欢喝咖啡,咖啡一般分为四种:大杯加糖、大杯原味、小杯加糖、小杯原味。以这个为例子 进行图解。



4、桥连接模式的代码解释

    A:    abstration---->抽象部分

          先定义一个抽象的Coffee类,里面维护一个加糖还是不加糖的CoffeeAdditives一个实现类,具体加入啥有CoffeeAdditives的子类决定,但是杯子的大小是由Coffee的子类控制的

/**
 * Created by LuanXianSheng on 2017/3/1.
 * 定义一个咖啡的抽象类,咖啡分为大杯加糖 大杯原味 小杯加糖 小杯原味
 */

public abstract class Coffee {
    //实现部分,具体往咖啡里面加什么
    protected CoffeeAdditives ipml ;
    public Coffee(CoffeeAdditives ipml){
        this.ipml = ipml ;
    }

    /**
     * 什么大小的咖啡由子类实现
     */
    public abstract void makeCoffee();
}

  子类1:大杯的

   

/**
 * Created by LuanXianSheng on 2017/3/1.
 */

public class LargeCoffee extends Coffee {
    private CoffeeAdditives ipml ;
    public LargeCoffee(CoffeeAdditives ipml) {
        super(ipml);
        this.ipml =ipml;
    }

    @Override
    public void makeCoffee() {
        Log.i("Log","LargeCoffee:"+"大杯"+ipml.addSomething()+"的咖啡") ;
    }
}

   子类2:小杯的


/**
 * Created by LuanXianSheng on 2017/3/1.
 */

public class SmallCoffee extends Coffee {
    private CoffeeAdditives ipml ;
    public SmallCoffee(CoffeeAdditives ipml) {
        super(ipml);
        this.ipml =ipml;
    }

    @Override
    public void makeCoffee() {
        Log.i("Log","SmallCoffee:"+"小杯"+ipml.addSomething()+"的咖啡") ;
    }
}

    B:    implementor---->实现部分

          具体往Coffee里面加不加糖

/**
 * Created by LuanXianSheng on 2017/3/1.
 * 实现部分 具体往杯子里面加不加东西由子类实现
 */
public abstract  class CoffeeAdditives {
    public abstract  String addSomething();
}

      子类1:加糖

public class Suger extends CoffeeAdditives {
    @Override
    public String addSomething() {
        return "加糖";
    }
}

   子类2:原味


public class Ordinary extends CoffeeAdditives {
    @Override
    public String addSomething() {
        return "原味";
    }
}

   C:应用:

//加糖
Suger suger = new Suger() ;
//原味
Ordinary ordinary = new Ordinary();
//大杯加糖
LargeCoffee ls = new LargeCoffee(suger);
ls.makeCoffee();
//大杯原味
LargeCoffee lo = new LargeCoffee(ordinary);
lo.makeCoffee();
//小杯加糖
SmallCoffee ss = new SmallCoffee(suger) ;
ss.makeCoffee();
//小杯原味
SmallCoffee so = new SmallCoffee(suger) ;
so.makeCoffee();
代码逻辑很简单 ,不难理解!然而呢,这个模式的应用确实不多,一个很重要的原因就是对于抽象与实现分离的把握,是不是需要分离?如何分离,对设计者来说要有一个恰到好的分寸!不管怎么说,桥连接模式的优点是毋庸置疑的,分离抽象与实现,灵活的扩展以及对客户来说透明的实现。

总结一句话:桥接模式应用来说理解很简单,但是设计很不容易!!!(当然对我这种还是比较菜的菜鸟来说)



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值