• 编程-设计模式 7:桥接模式


    设计模式 7:桥接模式

    定义与目的
    • 定义:桥接模式将抽象部分与它的实现部分分离,使得它们都可以独立地变化。
    • 目的:该模式的主要目的是解耦一个类的抽象部分与其实现部分,使得这两部分可以独立地发展和变化。
    实现示例

    假设我们有一个图形库,需要支持不同平台上的图形绘制。我们可以使用桥接模式来实现这个需求。

    // 定义抽象部分 - 图形接口
    public interface Shape {
        void draw();
    }
    
    // 定义实现部分 - 绘图接口
    public interface DrawAPI {
        void draw();
    }
    
    // 具体实现 - 圆形
    public class Circle implements Shape {
        private int x, y, radius;
        private DrawAPI drawAPI;
    
        public Circle(int x, int y, int radius, DrawAPI drawAPI) {
            this.x = x;
            this.y = y;
            this.radius = radius;
            this.drawAPI = drawAPI;
        }
    
        @Override
        public void draw() {
            drawAPI.draw();
            System.out.println("Drawing a circle with x: " + x + ", y: " + y + ", radius: " + radius);
        }
    }
    
    // 具体实现 - Windows 平台绘图
    public class WindowsDrawAPI implements DrawAPI {
        @Override
        public void draw() {
            System.out.println("Drawing using Windows API");
        }
    }
    
    // 具体实现 - MacOS 平台绘图
    public class MacOsDrawAPI implements DrawAPI {
        @Override
        public void draw() {
            System.out.println("Drawing using MacOS API");
        }
    }
    
    // 客户端代码
    public class Client {
        public static void main(String[] args) {
            DrawAPI windowsDrawAPI = new WindowsDrawAPI();
            DrawAPI macOsDrawAPI = new MacOsDrawAPI();
    
            Shape circleWindows = new Circle(100, 100, 10, windowsDrawAPI);
            Shape circleMacOs = new Circle(100, 100, 10, macOsDrawAPI);
    
            circleWindows.draw();
            circleMacOs.draw();
        }
    }
    
    使用场景
    • 当你需要在抽象和实现之间建立一个松散耦合的关系时。
    • 当你需要独立地扩展抽象和实现的层次结构时。
    • 当一个类的实现细节不应该影响到使用它的客户时。

    桥接模式通过将抽象与实现分离,使得两者可以独立地变化和发展。这对于需要在不同的平台上提供相同功能的应用程序非常有用。

    小结

    桥接模式是一种常用的结构型模式,它可以帮助你解耦抽象与实现,使得两者可以独立地发展。这在需要支持多平台或多版本的系统中特别有用,因为它可以减少代码的重复,并提高系统的可维护性。

  • 相关阅读:
    Vue模板语法集(上)
    利用开源代码提高写代码能力
    Apache Jmeter压力测试与性能监控,监测cpu、内存、磁盘、网络
    面试题整理:vue 的双向数据绑定的实现原理?
    ChatGPT人工智能:ai大模型应用开发源码搭建
    【CNN】浅谈经典神经网络Classic Network
    卷积神经网络loss不下降,神经网络loss多少算正常
    DSPE-PEG-Silane,磷脂-聚乙二醇-硅烷,修饰二氧化硅颗粒用科研试剂
    Vue3——使用inject和provide对页面进行刷新
    PX4模块设计之十九:Replay模块
  • 原文地址:https://blog.csdn.net/qq_45831414/article/details/141053668