• 设计模式:桥接模式



    桥接模式是一种软件设计模式,用于将抽象部分与其实现部分分离,使它们可以独立地变化。该模式通过创建一个桥接接口,将抽象类和实现类连接起来,从而使它们可以独立地进行修改和扩展。桥接模式可以提高系统的灵活性和可扩展性,同时也有助于简化系统的设计。

    组成部分

    桥接模式的各个组成部分包括:

    1. 抽象部分(Abstraction):定义抽象部分的接口,通常是一个抽象类,并包含对实现部分的引用。

    2. 实现部分(Implementation):定义实现部分的接口,通常是一个接口或抽象类。

    3. 具体的抽象部分(Refined Abstraction):继承抽象部分并扩展其功能。

    4. 具体的实现部分(Concrete Implementation):实现实现部分的接口。

    在桥接模式中,抽象部分和实现部分通过桥接接口连接在一起。抽象部分通过委托实现部分的方法来完成具体的操作。这种分离使得抽象部分和实现部分可以独立地变化和扩展,从而提高了系统的灵活性和可扩展性。

    代码实现

    interface DrawAPI {
        public void drawCircle(int radius, int x, int y);
    }
     // 实现部分的具体实现类
    class RedCircle implements DrawAPI {
        public void drawCircle(int radius, int x, int y) {
            System.out.println("Drawing Circle[ color: red, radius: " + radius + ", x: " + x + ", y: " + y + "]");
        }
    }
     class GreenCircle implements DrawAPI {
        public void drawCircle(int radius, int x, int y) {
            System.out.println("Drawing Circle[ color: green, radius: " + radius + ", x: " + x + ", y: " + y + "]");
        }
    }
     // 定义抽象部分的接口
    abstract class Shape {
        protected DrawAPI drawAPI;
         protected Shape(DrawAPI drawAPI){
            this.drawAPI = drawAPI;
        }
         public abstract void draw();
    }
     // 抽象部分的具体实现类
    class Circle extends Shape {
        private int x, y, radius;
         public Circle(int x, int y, int radius, DrawAPI drawAPI) {
            super(drawAPI);
            this.x = x;
            this.y = y;
            this.radius = radius;
        }
         public void draw() {
            drawAPI.drawCircle(radius,x,y);
        }
    }
     // 测试代码
    public class BridgePatternDemo {
        public static void main(String[] args) {
            Shape redCircle = new Circle(100,100, 10, new RedCircle());
            Shape greenCircle = new Circle(100,100, 10, new GreenCircle());
             redCircle.draw();
            greenCircle.draw();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44

    在这个示例中,我们定义了一个 DrawAPI 接口,表示实现部分的接口,然后定义了两个具体的实现类 RedCircle 和 GreenCircle 。接着,我们定义了一个 Shape 抽象类,表示抽象部分的接口,其中包含一个 DrawAPI 类型的成员变量。最后,我们定义了一个 Circle 类,表示抽象部分的具体实现类,它继承自 Shape 类,并在 draw 方法中调用 DrawAPI 接口的 drawCircle 方法。

    在 BridgePatternDemo 类中,我们创建了一个 RedCircle 对象和一个 GreenCircle 对象,并调用它们的 draw 方法来绘制圆形。这里需要注意的是,我们可以在运行时动态地切换实现部分的具体实现类,从而实现更灵活的系统设计。

    优缺点

    桥接模式的优点:

    • 分离抽象和实现部分,使它们可以独立地变化。这样可以增加系统的灵活性和可扩展性。
    • 通过桥接接口,可以动态地切换和组合不同的抽象部分和实现部分,从而实现更灵活的系统设计。
    • 桥接模式可以提高代码的可读性和可维护性,使系统更易于理解和修改。

    桥接模式的缺点:

    • 桥接模式需要额外的抽象部分和实现部分的接口和类,增加了系统的复杂性。
    • 如果抽象部分和实现部分的变化不频繁,或者系统规模较小,使用桥接模式可能会显得过于繁琐和复杂。

    总结

    桥接模式通过将抽象部分和实现部分分离,提高了系统的灵活性和可扩展性。它可以帮助我们设计出更灵活、可维护和可扩展的系统。然而,使用桥接模式也需要权衡其引入的复杂性和额外的代码开销。

  • 相关阅读:
    在线生成接口文档
    Vite中的CSS工程化方案
    基于spring boot+ vue开发的位置数据展现和分析平台源码 UWB源码
    冷库温度采集远程告警网关可多路采集
    第一个mybatis程序,实现增删改查CRUD
    webgl 系列 —— 变换矩阵和动画
    【从入门到起飞】JavaSE—方法引用
    数据治理:误区梳理篇
    细胞凋亡通路 | MedChemExpress
    基于php旅游网站管理系统获取(php毕业设计)
  • 原文地址:https://blog.csdn.net/qq_27586963/article/details/132945371