【编程素质】设计模式-桥接模式
来源:互联网 发布:运营商认证数据不正确 编辑:程序博客网 时间:2024/06/08 07:42
1,概念
桥接模式(Bridge Pattern):
将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化。
2,场景
①需要跨越多个平台的图形和窗口系统上。
②需要不同的方式改变接口和实现。
3,demo
1)汽车
①需求
对于汽车有不同的类型,它们所行驶的环境(高速、公路)也在变化。在系统中如何适应这两方面的变化?
②传统做法
通过多次继承实现。
遵循了开放-封闭原则的同时,违背了类的单一职责,即一个类只有一个引起它变化的原因。
因为继承太多,难于维护,可扩展性差,重复代码也很多。
③桥接模式
package bridge_pattern;public class Main { public static void main(String[] args){ AbstractRoad roadSpeedWay = new SpeedWay(); roadSpeedWay.setCar(new Car()); roadSpeedWay.Run(); System.out.println("=============="); AbstractRoad roadStreet = new Street(); roadStreet.setCar(new Bus()); roadStreet.Run(); }}
package bridge_pattern;//抽象汽车类public abstract class AbstractCar { public abstract void Run(); }
package bridge_pattern;public class Car extends AbstractCar{ @Override public void Run() { System.out.println("小汽车在"); }}
package bridge_pattern;public class Bus extends AbstractCar{ @Override public void Run() { System.out.println("公共汽车在"); }}
package bridge_pattern;public abstract class AbstractRoad { private AbstractCar car; public void setCar(AbstractCar car){ this.car = car; car.Run(); } public abstract void Run();}
package bridge_pattern;public class SpeedWay extends AbstractRoad{ @Override public void Run() { System.out.println("高速公路"); }}
package bridge_pattern;public class Street extends AbstractRoad{ @Override public void Run() { System.out.println("市区街道"); }}
4,优缺点
优:
①将实现和界面解耦。使抽象喝实现可以沿着各自的维度来变化。
②抽象和实现可以独立扩展。
③对于“具体的抽象类”所做的改变,不会影响到客户。
缺:
增加了复杂度。
0 0
- 【编程素质】设计模式-桥接模式
- 【编程素质】设计模式-其它
- 【编程素质】设计模式-单例模式
- 【编程素质】设计模式-观察者模式
- 【编程素质】设计模式-策略模式
- 【编程素质】设计模式-装饰模式
- 【编程素质】设计模式-命令模式
- 【编程素质】设计模式-外观模式
- 【编程素质】多线程编程之设计模式
- 【编程素质】设计模式-模板方法
- 【编程素质】设计模式-模板方法
- 【编程素质】设计模式-适配器模式(Adapter)
- 【编程素质】设计模式-单例模式(Singleton pattern)
- 【编程素质】设计模式-代理模式(委托模式、Proxy Pattern)
- 【编程素质】设计模式-工厂模式:工厂方法、简单工厂、抽象工厂
- 设计模式----桥接模式
- 设计模式---桥接模式
- 设计模式:桥接模式
- 安卓界面组件----列表视图
- ORB_SLAM2在Android上的移植过程
- 讲讲HashCode的作用
- mysql如何解决中文乱码问题
- ios for 高通Vuforia图像识别+AR(二)
- 【编程素质】设计模式-桥接模式
- 数据库笔记
- ERP学习笔记
- webx框架-依赖注入
- IDEA2016 最新激活码
- oracle中listener.ora&tnsnames.ora
- mysql基础
- bzoj2839 关于组合数的若干yy
- JavaScript中数组使用总结