设计模式-桥接模式


桥接模式的定义

*桥接(Bridge)模式: * 将抽象与实现分离,使他们可以独立变化,它是用组合关系代替继承关系来实现的,从而降低了抽象与实现这两个可变维度的耦合度

特点

  1. *优点: *
    • 由于抽象与实现分离,所以扩展能力强
    • 其实现细节对客户透明
  2. *缺点: *
    • 由于聚合关系建立在抽象层,要求开发者针对抽象化进行设计与编程,这增加了系统的理解与设计难度

模式的结构与实现

  1. 模式的结构

    • 抽象化(Abstraction)角色:定义抽象类,并包含一个对实现化对象的引用

    • 扩展抽象化(Refined Abstraction)角色:是抽象化角色的子类,实现父类中的业务方法,并通过组合关系调用实现化角色中的业务方法

    • 实现化(Implementor)角色:定义实现化角色的接口,供扩展抽象化角色调用

    • 具体实现化(Concrete Implementor)角色:给出实现化角色接口的具体实现

    桥接模式结构图

  2. 模式的实现

    /**
     * 桥接模式
     * 通俗理解: 如果有两个接口或抽象类: 颜色与形状,现在要创建一个图形(包含颜色形状)
     *  方案1. 实现两个接口成为新类即新的图形,缺点是如果有很多其他颜色的图形那需要很多个实现类
     *  方案2. 实现图形接口,在内部维护一个颜色对象,此时,只需要传入不同颜色对象即可生成不同颜色图形,即使用桥接模式
     */
    
    //实现化角色: 如颜色
    interface Implementor{
        void operationImpl();
    }
    //具体实现化角色
    class ConcreteImplementorA implements Implementor{
        @Override
        public void operationImpl() {
            System.out.println("具体实现化角色被访问");
        }
    }
    //抽象化角色: 如形状
    abstract class Abstraction{
        //内部维护一个实现化角色:如颜色对象
        protected Implementor imple;
        protected Abstraction(Implementor imple) {
            this.imple = imple;
        }
        public abstract void operation();
    }
    //扩展抽象化角色
    class RefinedAbstraction extends Abstraction{
        protected RefinedAbstraction(Implementor imple) {
            super(imple);
        }
        @Override
        public void operation() {
            System.out.println("扩展抽象化角色被访问");
            imple.operationImpl();
        }
    }
    //测试
    public class BridgeTest {
        public static void main(String[] args) {
            Implementor imple = new ConcreteImplementorA();
            Abstraction abs = new RefinedAbstraction(imple);
            abs.operation();
        }
    }

文章作者: Bryson
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Bryson !
评论
 上一篇
设计模式-装饰模式 设计模式-装饰模式
装饰模式的定义 *装饰(Decorator)模式: * 指在不改变现有对象结构的情况下,动态的给该对象增加一些职责(即增加额外功能)的模式,它属于对象结构型模式 特点 *优点: * 采用装饰模式扩展对象的功能比采用继承方式更加灵活 可以设
2020-04-13
下一篇 
设计模式-适配器模式 设计模式-适配器模式
适配器模式定义 适配器模式(Adapter): ** 将一个类的接口转换成客户希望的另外一个接口,是的原本由于接口不兼容而不能一起工作的那些类能一起工作,失配模式分为类结构型模式和对象接口型模式**,前者类之间的耦合度比后者高,使用较少
2020-04-07
  目录