首页 > 其他分享 >桥接模式

桥接模式

时间:2024-09-17 15:01:37浏览次数:10  
标签:桥接 Shape 模式 System color int println public

桥接模式

桥接模式(Bridge Pattern)是一种结构型设计模式,它通过将抽象部分与实现部分分离,从而使它们可以独立地变化。这个模式的主要目的是解耦抽象和实现,使得它们可以独立地变化和扩展。

主要概念

  1. 抽象(Abstraction): 这是一个接口或抽象类,它定义了高层次的操作。
  2. 修正抽象(Refined Abstraction): 这是对抽象的具体实现,它可以扩展抽象的功能。
  3. 实现(Implementor): 这是一个接口或抽象类,它定义了具体的实现部分的接口。
  4. 具体实现(Concrete Implementor): 这是实现接口的具体类,它提供了实现细节。

结构

  • Abstraction: 维护一个指向Implementor的引用,并定义一些操作。
  • Refined Abstraction: 继承自Abstraction并实现其具体行为。
  • Implementor: 定义了实现部分的接口,提供了实现的基本方法。
  • Concrete Implementor: 实现了Implementor接口,并提供了具体的实现细节。

示例

假设你在开发一个图形绘制系统,你有不同的形状(如圆形和方形)和不同的绘制方式(如画笔或钢笔)。你可以使用桥接模式将形状和绘制方式分开,以便它们可以独立变化。

颜色

//颜色接口
public interface Color {
    void applyColor();
}
//蓝色
public class Blue implements Color {
    @Override
    public void applyColor() {
        System.out.println("应用蓝色");
    }
}
//绿色
public class Green implements Color {
    @Override
    public void applyColor() {
        System.out.println("应用绿色");
    }
}
//红色
public class Red implements Color {
    @Override
    public void applyColor() {
        System.out.println("应用红色");
    }
}

形状

//行状抽象类
public abstract class Shape {
    protected Color color;

    protected Shape(Color color) {
        this.color = color;
    }

    public abstract void draw();
}
//圆形
public class Circle extends Shape {
    private int radius;

    public Circle(int radius, Color color) {
        super(color);
        this.radius = radius;
    }

    @Override
    public void draw() {
        color.applyColor();
        System.out.println("绘制圆形,半径为: " + radius);
    }
}
//矩形
public class Rectangle extends Shape {
    private int width;
    private int height;

    public Rectangle(int width, int height, Color color) {
        super(color);
        this.width = width;
        this.height = height;
    }

    @Override
    public void draw() {
        color.applyColor();
        System.out.println("绘制矩形,宽度为: " + width + " 高度为: " + height);
    }
}
//正方形
public class Square extends Shape {
    private int side;

    public Square(int side, Color color) {
        super(color);
        this.side = side;
    }

    @Override
    public void draw() {
        color.applyColor();
        System.out.println("绘制正方形,边长为: " + side);
    }
}
//椭圆
public class Ellipse extends Shape {
    private int majorAxis;
    private int minorAxis;

    public Ellipse(int majorAxis, int minorAxis, Color color) {
        super(color);
        this.majorAxis = majorAxis;
        this.minorAxis = minorAxis;
    }

    @Override
    public void draw() {
        color.applyColor();
        System.out.println("绘制椭圆,长轴为: " + majorAxis + " 短轴为: " + minorAxis);
    }
}

演示

  Shape redCircle = new Circle(10, new Red());
        redCircle.draw();

        System.out.println();

        Shape greenRectangle = new Rectangle(20, 30, new Green());
        greenRectangle.draw();

        System.out.println();

        Shape blueEllipse = new Ellipse(15, 10, new Blue());
        blueEllipse.draw();

        System.out.println();

        Shape redSquare = new Square(5, new Red());
        redSquare.draw();

通过这种方式,你可以在不修改Shape的情况下增加新的DrawingAPI实现,或者在不修改DrawingAPI的情况下增加新的Shape实现。

优点

  • 解耦: 抽象和实现分离,使得它们可以独立变化。
  • 灵活性: 可以在不修改已有代码的情况下添加新功能。
  • 易于扩展: 通过增加新的实现或抽象类,可以方便地扩展系统功能。

缺点

  • 复杂性增加: 引入了额外的类和接口,可能增加系统的复杂性。
  • 学习曲线: 需要理解抽象和实现的分离,可能对初学者有一定难度。

桥接模式是一种强大的设计模式,它在需要将复杂系统分解为不同的部分并实现它们的独立变化时非常有用。

标签:桥接,Shape,模式,System,color,int,println,public
From: https://www.cnblogs.com/20lxj666/p/18388635

相关文章

  • 【加密算法基础——AES CBC模式代码解密实践】
    AES解密实践之代码实现AES解密使用python脚本比较灵活,但是一定要保证脚本是调试过的,才能在找到正确的密文,密钥,初始向量的情况下,解出正确的明文。但是对于AES解密,命令行无法处理key截断的问题。实际测试了一下,CBC模式,对于key截断的问题可以解决,但是CFB模式,目前还无法实验......
  • 设计模式---- 门面模式
    门面模式门面模式(FacadePattern)是一种结构型设计模式,用于为复杂子系统提供一个统一、简单的接口,隐藏系统的复杂性。通过门面模式,客户端无需直接与系统的内部组件交互,而是通过门面类与系统打交道,简化了客户端的使用,降低了系统的复杂性和耦合度。门面模式的主要概念定义:门面模......
  • 攻防世界 ————新手模式适合作为桌面 misc
    (本篇文章参考大佬的解题)下载附件,得到rar的的压缩包,解压缩,打开文件后有一张图片:打开图片发现什么也没有:使用软件Stegsolve打开图片看有什么问题:点击下一页:点击后发现有一个二维码:把他保存下来,使用软件扫码看看里面有什么:(我是用微信扫码的)出现了十六进制的数字:把他复......
  • 设计模式---- 工厂模式
    工厂模式工厂模式是一种创建型设计模式,它的主要目的是将对象的创建过程与对象的使用过程分离。工厂模式通过引入工厂类或者工厂方法,隐藏对象创建的复杂性,使得代码更加灵活、可扩展。工厂模式的使用场景主要在于:当我们需要对创建的对象进行封装或延迟创建时,工厂模式是一个很好的选......
  • 反DDD模式之关系型数据库
    本文书接上回《图穷匕见-所有反DDD模式都是垃圾》,关注公众号(老肖想当外语大佬)获取信息:最新文章更新;DDD框架源码(.NET、Java双平台);加群畅聊,建模分析、技术实现交流;视频和直播在B站。背景我在与开发者交流关于DDD的建模思路时,往往会遇到一个难题,就是不少经验丰富的开发者,总是带着技......
  • 反DDD模式之关系型数据库
    本文书接上回《图穷匕见-所有反DDD模式都是垃圾》,关注公众号(老肖想当外语大佬)获取信息:最新文章更新;DDD框架源码(.NET、Java双平台);加群畅聊,建模分析、技术实现交流;视频和直播在B站。背景我在与开发者交流关于DDD的建模思路时,往往会遇到一个难题,就是不少经验丰富的开发者,总是带......
  • Qt:实现单例模式
    前言记录一下。正文单例模式根据实现方式和应用场景在Qt中可以分为以下几种类型:1.懒汉式单例懒汉式单例在第一次使用时才创建实例,延迟了对象的初始化。懒汉式单例分为线程安全和线程不安全两种实现方式。线程不安全的懒汉式单例:在第一次调用getInstance()时创建......
  • 【理论篇】数据挖掘 第六章 挖掘频繁模式、关联和相关性:基本概念和方法(下)
    说明:文章为《数据挖掘:概念与技术原书第03版》的学习笔记,该书是数据挖掘领域的经典之作,想了解更多内容请参阅原著。首先祝大家中秋快乐,本文章接上篇【理论篇】数据挖掘第六章挖掘频繁模式、关联和相关性:基本概念和方法(上)思考:满足最小支持度和最小置信度的模式一定是有趣......
  • LVS三种负载均衡模式的比较
    文章目录三种模式对比三种模式对比LVS-NATLVS-DRLVS-TUN服务器操作系统可以使用任何支持TCP/IP的操作系统大多数常见的操作系统都可以使用需要支持IP隧道技术的操作系统服务器网络需要私有网络,所有真实服务器(RS)必须位于同一局域网内同样需要局域网,但RS可以使用公网......
  • redis哨兵模式和集群模式
    ###哨兵模式 想象一下你有一家便利店,这个便利店就是你的Redis服务器。为了确保便利店能一直营业,你需要有人来监督这家店是否正常运作。这就是哨兵模式的基本思想。 -**哨兵(Sentinel)**:哨兵就像是便利店的保安,它们的任务是监视便利店是否正常开门营业(也就是监视Redis服务......