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

    */
相关推荐
duration~29 分钟前
Maven随笔
java·maven
zmgst32 分钟前
canal1.1.7使用canal-adapter进行mysql同步数据
java·数据库·mysql
跃ZHD41 分钟前
前后端分离,Jackson,Long精度丢失
java
blammmp1 小时前
Java:数据结构-枚举
java·开发语言·数据结构
暗黑起源喵1 小时前
设计模式-工厂设计模式
java·开发语言·设计模式
WaaTong1 小时前
Java反射
java·开发语言·反射
九圣残炎2 小时前
【从零开始的LeetCode-算法】1456. 定长子串中元音的最大数目
java·算法·leetcode
wclass-zhengge2 小时前
Netty篇(入门编程)
java·linux·服务器
Re.不晚2 小时前
Java入门15——抽象类
java·开发语言·学习·算法·intellij-idea
雷神乐乐3 小时前
Maven学习——创建Maven的Java和Web工程,并运行在Tomcat上
java·maven