博客
关于我
Java设计模式 —— 桥接模式(Bridge)
阅读量:296 次
发布时间:2019-03-03

本文共 2241 字,大约阅读时间需要 7 分钟。

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

定义

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

特征:

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

代码实现

简书:

  • 这里我们通过泡咖啡的例子来简单看看桥接模式的实现和应用
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之间就是一个桥接模式。

在这里插入图片描述
另外,Window 与 WindowManager 之间也是桥接模式。

感谢

segmentfault:

菜鸟教程:
百度百科:
博客园:
简书:

转载地址:http://qouq.baihongyu.com/

你可能感兴趣的文章
压缩解压
查看>>
js try{}catch(){}finally{}语句
查看>>
ES6 函数模块(四)
查看>>
JavaScript入门
查看>>
PAT (Basic Level) Practice (中文)——1005 继续(3n+1)猜想 (25分)
查看>>
PAT (Basic Level) Practice (中文)——1011 A+B 和 C (15分)
查看>>
i711700K和r55600x差距大不大 i7 11700K和r5 5600x对比哪个好
查看>>
R3 PRO 3200G和r7 3700u 哪个好
查看>>
入手评测 联想小新Pro14和Air14Plus哪个好?区别对比
查看>>
程序人生:没有伞的孩子要学会奔跑
查看>>
Express Animate for mac(动画特效制作软件)
查看>>
macOS Big Sur系统中如何开启设置触控板三指拖拽功能?
查看>>
修复苹果Mac中的快速视频播放错误的方法
查看>>
苹果HomePod智能音箱怎么使用广播功能?
查看>>
Mac系统投屏到电视机的方法
查看>>
【Docker&ARM】ARM架构服务器上docker的安装
查看>>
【Tinyproxy】CentOS7.X http代理tinyproxy的安装配置与使用
查看>>
php-foreach遍历一维数组
查看>>
php--自定义错误处理函数的使用方法
查看>>
php--异常处理主动抛出异常的使用方法
查看>>