Java学习笔记(10)-23种设计模式之桥接模式(Bridge)

今天总结结构型模式的第三种模式,桥接模式(Bridge模式)。

定义

将抽象与实现分离,使他们可以独立变化,它利用抽象类和接口组合的方式来替代继承关系,从而降低了抽象和实现这两个可变维度的耦合度。

结构

  • 抽象化角色 : 定义一个抽象类,并包含一个实现化对象的引用。
  • 扩展抽象化角色 : 是抽象化角色的字类,实现父类中的业务方法,并通过组合关系调用实现化角色中的业务方法。
  • 实现化 : 定义实现化角色的接口,供拓展抽象化角色调用
  • 具体实现化 : 给出实现化接口的具体实现。

代码示例

public class MyBridgeTest {
    public static void main(String[] args){
        ConcreteImplementorA concreteImplementorA = new ConcreteImplementorA();
        Abstraction refinedAbstraction = new RefinedAbstraction(concreteImplementorA);
        refinedAbstraction.Operation();
    }
    /**
     * 实现化角色
     */
    interface Implementor{
        void OperationImpl();
    }
    /**
     * 具体实例化角色
     */
    static class ConcreteImplementorA implements Implementor{

        @Override
        public void OperationImpl() {
            System.out.println("具体实例化(ConcreteImplementorA)角色被访问");
        }
    }
    /**
     * 抽象化角色
     */
    static abstract class Abstraction{
       protected  Implementor implementor;
       protected Abstraction(Implementor implementor){
           this.implementor = implementor ;
       }
       public abstract void Operation();
    }
    /**
     * 扩展抽象化角色
     */
    static class RefinedAbstraction extends Abstraction
    {
        protected RefinedAbstraction(Implementor implementor)
        {
            super(implementor);
        }
        public void Operation()
        {
            System.out.println("扩展抽象化(Refined Abstraction)角色被访问" );
            implementor.OperationImpl();
        }
    }
}

打印结果如下

扩展抽象化(Refined Abstraction)角色被访问
具体实例化(ConcreteImplementorA)角色被访问

简单梳理一下实现原理

  • 第一步:定义一个实现化角色,它是一个接口,声明具体实现角色所需要实现的方法。
  • 第二步:定义一个具体实现的类,它负责具体实现
  • 第三步:定义一个抽象化角色,也就是一个抽象类,它包含一个具体实现类的引用和一个实现具体业务的抽象方法。
  • 第四步:定义一个扩展实现类,它继承自抽象这个抽象类,并在其实现真正业务的抽象业务里实现父类的方法,做具体的业务。

优缺点

  • 优点 : 抽象与实现相分离,我们可以根据需求进行扩展;实现的细节对客户透明
  • 缺点:由于实现的聚合关系都依赖于抽象层,因此在设计时对设计人员的技术要求比较高。
    今天的桥接模式就总结到这里,觉得对您有帮助记得点个赞~

你可能感兴趣的:(Java学习笔记(10)-23种设计模式之桥接模式(Bridge))