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

    */
相关推荐
@淡 定8 分钟前
Java内存模型(JMM)详解
java·开发语言
czhc114007566332 分钟前
C# 1221
java·servlet·c#
黄俊懿34 分钟前
【深入理解SpringCloud微服务】Seata(AT模式)源码解析——全局事务的回滚
java·后端·spring·spring cloud·微服务·架构·架构师
派大鑫wink40 分钟前
【Day12】String 类详解:不可变性、常用方法与字符串拼接优化
java·开发语言
JIngJaneIL43 分钟前
基于springboot + vue健康管理系统(源码+数据库+文档)
java·开发语言·数据库·vue.js·spring boot·后端
秋饼44 分钟前
【三大锁王争霸赛:Java锁、数据库锁、分布式锁谁是卷王?】
java·数据库·分布式
电商API&Tina1 小时前
【电商API接口】关于电商数据采集相关行业
java·python·oracle·django·sqlite·json·php
刘一说1 小时前
Spring Boot中IoC(控制反转)深度解析:从实现机制到项目实战
java·spring boot·后端
悟空码字1 小时前
SpringBoot参数配置:一场“我说了算”的奇幻之旅
java·spring boot·后端
我居然是兔子1 小时前
Java虚拟机(JVM)内存模型与垃圾回收全解析
java·开发语言·jvm