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

    */
相关推荐
WaWaJie_Ngen12 小时前
【设计模式】代理模式(Proxy)
设计模式·代理模式
god0012 小时前
chromium项目中添加源文件(BUILD.gn项目中添加源文件)
java·服务器·前端
LL_break12 小时前
线程3 JavaEE(阻塞队列,线程池)
java·开发语言·java-ee·线程·线程池·阻塞队列
镜花水月linyi12 小时前
解锁AQS
java·后端·面试
gAlAxy...13 小时前
面试(六)——Java IO 流
java·面试·职场和发展
狂团商城小师妹13 小时前
JAVA无人共享台球杆台球柜系统球杆柜租赁系统源码支持微信小程序
java·开发语言·微信小程序·小程序
麦麦鸡腿堡13 小时前
Java的抽象类实践-模板设计模式
java·开发语言·设计模式
WaWaJie_Ngen13 小时前
【设计模式】外观模式/门面模式(Facaed)
设计模式·外观模式
Asort13 小时前
JavaScript设计模式(十九)——观察者模式 (Observer)
前端·javascript·设计模式
沙虫一号13 小时前
聊聊Java里的那把锁:ReentrantLock到底有多强大?
java