设计模式-桥接模式
Posted jiangtao1218
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式-桥接模式相关的知识,希望对你有一定的参考价值。
将类的功能层次结构,与实现层次结构分离
Bridge模式的作用:将在“类的功能层次结构”和“类的实现层次结构”之间搭建桥梁
“桥梁”的实现方式:类的功能层次结构 聚合 类的实现层次结构
类功能层次结构:基类、子类一层层继承,通过继承,不断添加新的功能(函数),形成类的功能层次结构
类的实现层次结构:基类中定义了抽象方法,子类负责实现,多个平行子类分别实现不同功能,形成类的实现层次结构
类的功能层次结构 和 类的实现层次结构 的顶层都是抽象的
类的功能层次结构 委托 类的实现层次结构 来达满足某些需求
当我们编写一个子类时,先确认自己的意图:是要增加功能呢,还是要增加实现呢
继承是强关联,委托(聚合)是弱关联
继承解决一个维度变化的问题,而桥接模式就是用来解决这种有两个变化纬度的情况下
桥接模式的本质:分离抽象和实现。
实际需求场景:一个对象,有多个维度,每个维度都有多样化继承需求
桥接模式定义
将抽象部分与它的实现部分分离,使它们都可以独立地变化。
桥接模式通过引入实现的接口,把实现部分从系统中分离出去;那么,抽象这边如何使用具体的实现呢?肯定是面向实现的接口来编程了,为了让抽象这边能够很方便的与实现结合起来,把顶层的抽象接口改成抽象类,在里面持有一个具体的实现部分的实例。
谁来桥接:
所谓谁来桥接,就是谁来负责创建抽象部分和实现部分的关系,说得更直白点,就是谁来负责创建Implementor的对象,并把它设置到抽象部分的对象里面去,这点对于使用桥接模式来说,是十分重要的一点。
大致有如下几种实现方式:
- 由客户端负责创建Implementor的对象,并在创建抽象部分的对象的时候,把它设置到抽象部分的对象里面去,前面的示例采用的就是这个方式(手动创建,手动注入)
- 可以在抽象部分的对象构建的时候,由抽象部分的对象自己来创建相应的Implementor的对象,当然可以给它传递一些参数,它可以根据参数来选择并创建具体的Implementor的对象(参数化创建)
- 可以在Abstraction中选择并创建一个缺省的Implementor的对象,然后子类可以根据需要改变这个实现(内部默认创建,子类改变)
- 也可以使用抽象工厂或者简单工厂来选择并创建具体的Implementor的对象,抽象部分的类可以通过调用工厂的方法来获取Implementor的对象(工厂方法)
- 如果使用IoC/DI容器的话,还可以通过IoC/DI容器来创建具体的Implementor的对象,并注入回到Abstraction中(自动创建、自动注入)
典型例子-JDBC
在Java应用中,对于桥接模式有一个非常典型的例子,就是:应用程序使用JDBC驱动程序进行开发的方式。所谓驱动程序,指的是按照预先约定好的接口来操作计算机系统或者是外围设备的程序。
对于这个问题,再次强调一点:对于设计模式,要从整体结构上、从本质目标上、从思想体现上来把握,而不要从局部、从表现、从特例实现上来把握。
桥接模式的结构如图所示:
以上是关于设计模式-桥接模式的主要内容,如果未能解决你的问题,请参考以下文章