Day06-设计模式之桥接模式

桥接模式介绍

  • 桥接模式(Bridge Pattern)是将实现与抽象放在两个不同的类层次中,使两个层次可以独立改变,保持各部分的独立性以及应对他们的功能扩展。

UML类图及角色职责

在这里插入图片描述

image-20230411105128684

  • 抽象类(Abstraction):定义抽象接口,由聚合关系可知,抽象类中包含一个Implementor类型的对象,它与Implementor之间有关联关系,既可以包含抽象业务方法,也可以包含具体业务方法。

  • 实现类接口(Implementor):定义实现类的接口,这个接口可以与Abstraction类的接口不同。一般而言,实现类接口只定义基本操作,而抽象类的接口还可能会做更多复杂的操作。

  • 扩充抽象类(RefinedAbstraction):具体类,实现在抽象类中定义的接口,可以调用在Implementor中定义的方法。

  • 具体实现类(ConcreteImplementor):具体实现了Implementor接口,在不同的具体实现类中实现不同的具体操作。

代码实现

前言:举个栗子,我们的电脑因为安装了太多软件,运行软件的时候会占内存储器,于是我们可以对我们电脑去加装内存条,我们把电脑拿到电脑城,发现技术小哥打开机箱后直接将内存条插进了一个卡槽里,这时我们发现,加装内存条如此方便,原来是之前就预留了接口,我们直接将需要的内存条插进这个接口里就可以实现动态扩展,而不需要修改整个主机。这就是设计模式之桥接模式。

实现类接口

package day07_bridge.test03;

/**
 * @author coolsheep
 * @date 2023/3/28 10:54
 * @Describe 实现类接口
 */
public interface MemoryAPI {
    //加装内存
    public void add();
}

具体的实现类

package day07_bridge.test03;

/**
 * @author coolsheep
 * @date 2023/3/28 10:55
 * @Describe 具体的实现类
 */
public class Memory8GAPI implements MemoryAPI {

    @Override
    public void add() {
        System.out.println("我加装了8G内存");
    }
}

具体的实现类

package day07_bridge.test03;

/**
 * @author coolsheep
 * @date 2023/3/28 10:55
 * @Describe 具体的实现类
 */
public class Memory16GAPI implements MemoryAPI {

    @Override
    public void add() {
        System.out.println("我加装了16G内存");
    }
}

抽象类

package day07_bridge.test03;

/**
 * 抽象类
 */
public abstract class Computer {
    protected MemoryAPI memoryAPI;

    public void setMemoryAPI(MemoryAPI memoryAPI) {
        this.memoryAPI = memoryAPI;
    }

    public abstract void describe();
}

扩充的抽象类

package day07_bridge.test03;

/**
 * 扩充抽象类
 */
public class PCComputer extends Computer {
    @Override
    public void describe() {
        System.out.println("我是个人计算机");
        memoryAPI.add();
    }
}

扩充的抽象类

package day07_bridge.test03;

/**
 * 扩充抽象类
 */
public class ServerComputer extends Computer {
    @Override
    public void describe() {
        System.out.println("我是服务器");
        memoryAPI.add();
    }
}


客户端调用

package day07_bridge.test03;

//客户端调用
public class Client {
    public static void main(String[] args) {
        Computer pc = new PCComputer();
        pc.setMemoryAPI(new Memory8GAPI());
        pc.describe();

        Computer server = new ServerComputer();
        server.setMemoryAPI(new Memory16GAPI());
        server.describe();
    }
}

总结

  • 实现了抽象和实现部分的分离,从而极大的提供了系统的灵活性,让抽象部分和实现部分独立开来,这有助于系统进行分层设计,从而产生更好的结构化系统。

  • 桥接模式替代多层继承方案,可以减少子类的个数,降低系统的管理和维护成本。

  • 桥接模式的引入增加了系统的理解和设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计和编程。

posted @ 2023-04-16 20:59  晴天阴天下雨天  阅读(29)  评论(0)    收藏  举报