Java实现桥接模式(设计模式 五)

桥接模式是一种结构型设计模式,它将抽象部分与实现部分分离,使它们可以独立地变化,桥接模式通过提供一个桥接接口,将抽象类与具体实现类解耦,使它们可以独立地进行扩展。

基本设计流程如下

1. 定义抽象类或接口,作为实现的桥接点

java 复制代码
// 实现的桥接点接口
interface Implementor {
    //原始功能
    void operationImpl();
}

2. 创建抽象部分的抽象类或接口

创建抽象类或接口,抽象部分的接口应该包含对实现部分的引用,并定义抽象方法

java 复制代码
// 抽象类(抽象部分)
abstract class Abstraction {
    //原始功能引用(桥接抽象部分和实现部分的关键)
    protected Implementor implementor;

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

    //扩展的新功能(抽象部分)
    abstract void operation();
}

3. 创建实现部分的具体实现类

根据实现部分的接口,创建具体的实现类。每个具体实现类负责实现实现部分的接口。

java 复制代码
// 具体实现类A
class ConcreteImplementorA implements Implementor {
    @Override
    public void operationImpl() {
        System.out.println("原始功能A");
    }
}

// 具体实现类B
class ConcreteImplementorB implements Implementor {
    @Override
    public void operationImpl() {
        System.out.println("原始功能B");
    }
}

4. 创建抽象部分的具体扩展类

每个具体扩展类继承自抽象部分的抽象类或实现抽象部分的接口,并实现抽象方法。在具体扩展类的方法中,调用实现部分的方法,以实现抽象部分和实现部分的交互。

java 复制代码
// 具体实现类A的扩展(抽象部分扩展类)
class RefinedAbstractionA extends Abstraction {
    //构建含有原始功能的引用
    protected RefinedAbstractionA(Implementor implementor) {
        super(implementor);
    }

    //添加的新功能
    @Override
    void operation() {
        System.out.println("扩展原始A的操作");
//      super.implementor.operationImpl();
        //同时实现原始功能
        implementor.operationImpl();
    }
}

// 具体实现类B的扩展((抽象部分扩展类))
class RefinedAbstractionB extends Abstraction {
    protected RefinedAbstractionB(Implementor implementor) {
        super(implementor);
    }

    @Override
    void operation() {
        System.out.println("扩展原始功能B的操作");
        implementor.operationImpl();
    }
}

5. 使用桥接模式进行测试

创建具体实现类的实例,并将其传递给具体扩展类的构造函数,然后,调用具体扩展类的方法,触发抽象部分和实现部分的交互

java 复制代码
public class Main {
    public static void main(String[] args) {
        //原始实现类对象
        Implementor implementorA = new ConcreteImplementorA();
        Implementor implementorB = new ConcreteImplementorB();

        //同时实现两个功能A(抽象部分和实现部分)
        Abstraction abstractionA = new RefinedAbstractionA(implementorA);
        abstractionA.operation();

        System.out.println("------------------------------------");

        //同时实现两个功能B(抽象部分和实现部分)
        Abstraction abstractionB = new RefinedAbstractionB(implementorB);
        abstractionB.operation();
    }
}

    /* 结果如下

    扩展原始A的操作
    原始功能A
    ------------------------------------
    扩展原始功能B的操作
    原始功能B

    */
相关推荐
阿乾之铭18 分钟前
spring MVC 拦截器
java·spring·mvc
码爸21 分钟前
flink 批量写clickhouse
java·clickhouse·flink
djgxfc23 分钟前
简单了解Maven与安装
java·maven
中文很快乐27 分钟前
springboot结合p6spy进行SQL监控
java·数据库·sql
丶白泽27 分钟前
重修设计模式-概览
java·设计模式
小电玩28 分钟前
谈谈你对Spring的理解
java·数据库·spring
五味香31 分钟前
C++学习,动态内存
java·c语言·开发语言·jvm·c++·学习·算法
无名之逆32 分钟前
计算机专业的就业方向
java·开发语言·c++·人工智能·git·考研·面试
爱棋笑谦39 分钟前
二叉树计算
java·开发语言·数据结构·算法·华为od·面试
狂盗一枝梅40 分钟前
深入理解Java对象结构
java