桥接模式 Bridge Pattern

一、模式介绍

1.1、定义

将抽象与实现分离,使它们可以独立变化。另一种定义:一个类存在两个(或多个)独立变化的维度,我们通过组合的方式,让这两个(或多个)维度可以独立进行扩展。

通过组合关系来替代继承关系,避免继承层次的指数级爆炸,从而降低了抽象和实现这两个可变维度的耦合度。

1.2、优点

  1. 抽象与实现分离,扩展能力强
  2. 符合开闭原则
  3. 符合合成复用原则
  4. 其实现细节对客户透明

1.3、缺点

由于聚合关系建立在抽象层,要求开发者针对抽象化进行设计与编程,能正确地识别出系统中两个独立变化的维度,这增加了系统的理解与设计难度。

二、结构与实现

2.1、结构

  1. 抽象化角色(Abstraction):定义抽象类,并包含一个对实现化的引用
  2. 扩展抽象化角色(RefinedAbstraction):是抽象化角色的子类,实现父类中的业务方法,并通过组合关系调用实现化角色中的业务方法
  3. 实现化角色(Implementor):定义实现化角色的接口,供扩展抽象化角色调用
  4. 具体实现化角色(ConcreteImplementor):给出实现化角色接口的具体实现
    桥接模式 Bridge Pattern_第1张图片

2.2、实现

桥接模式 Bridge Pattern_第2张图片

2.2.1、Abstraction
package com.erlang.bridge;

/**
 * @description: 抽象化角色
 * @author: erlang
 * @since: 2022-02-14 21:13
 */
public abstract class Abstraction {

    /**
     * 实现化角色
     */
    protected Implementor impl;

    protected Abstraction(Implementor impl) {
        this.impl = impl;
    }

    /**
     * 抽象化角色 方法
     */
    public abstract void operation();
}
2.2.2、RefinedAbstraction
package com.erlang.bridge;

/**
 * @description: 扩展抽象化角色
 * @author: erlang
 * @since: 2022-02-14 21:13
 */
public class RefinedAbstraction extends Abstraction {

    public RefinedAbstraction(Implementor imple) {
       super(imple);
    }

    @Override
    public void operation() {
        System.out.println("扩展抽象化角色 RefinedAbstraction 方法");
        impl.method();
    }
}
2.2.3、Implementor
package com.erlang.bridge;

/**
 * @description: 实现化角色
 * @author: erlang
 * @since: 2022-02-14 21:11
 */
public interface Implementor {
    /**
     * 业务方法
     */
    void method();
}
2.2.4、ConcreteImplementor
package com.erlang.bridge;

/**
 * @description: 具体实现化角色
 * @author: erlang
 * @since: 2022-02-14 21:11
 */
public class ConcreteImplementor implements Implementor {
    @Override
    public void method() {
        System.out.println("具体实现化角色 ConcreteImplementor 方法");
    }
}
2.2.5、BridgeClient
package com.erlang.bridge;

/**
 * @description: 桥接模式客户端
 * @author: erlang
 * @since: 2022-02-14 21:11
 */
public class BridgeClient {
    public static void main(String[] args) {
        Implementor imple = new ConcreteImplementor();
        Abstraction abs = new RefinedAbstraction(imple);
        abs.operation();
    }
}
2.2.6、 执行结果
扩展抽象化角色 RefinedAbstraction 方法
具体实现化角色 ConcreteImplementor 方法

你可能感兴趣的:(设计模式,结构型模式,设计模式)