桥接模式-举例

概叙:桥接模式用一种巧妙的方式处理多层继承存在的问题,
用抽象关联取代了传统的多层继承,
将类之间的静态继承关系转换为动态的对象组合关系,
使得系统更加灵活,并易于扩展,
同时有效控制了系统中类的个数,桥接定义如下:

桥接模式:将抽象部分与它实现的部分分离,使它们都可用独立地变化。
它是一种对象结构模式,又称柄体模式(Handle and Body)或接口模式.

桥接模式的结构与其名称一样,存在一条连接两个继承等级结构的桥,

举例:

让我们通过一个更简单的例子来更深入地理解桥接设计模式以及它是如何解决问题的。考虑一个图形绘制的场景,有两个维度的变化:形状和颜色。在没有桥接模式的情况下,可能会考虑创建形状的子类和颜色的子类,然后通过组合它们来得到所有可能的组合。这会导致类的爆炸,因为每个形状都需要与每种颜色组合一次。

不使用桥接模式的情况:

// 不使用桥接模式的代码
class CircleRed extends Circle {@Overridepublic void draw() {System.out.println("Drawing red circle");}
}class CircleGreen extends Circle {@Overridepublic void draw() {System.out.println("Drawing green circle");}
}class RectangleRed extends Rectangle {@Overridepublic void draw() {System.out.println("Drawing red rectangle");}
}class RectangleGreen extends Rectangle {@Overridepublic void draw() {System.out.println("Drawing green rectangle");}
}// 客户端代码
public class WithoutBridgePatternExample {public static void main(String[] args) {CircleRed redCircle = new CircleRed();redCircle.draw(); // Drawing red circleCircleGreen greenCircle = new CircleGreen();greenCircle.draw(); // Drawing green circleRectangleRed redRectangle = new RectangleRed();redRectangle.draw(); // Drawing red rectangleRectangleGreen greenRectangle = new RectangleGreen();greenRectangle.draw(); // Drawing green rectangle}
}

上述代码存在的问题是,每增加一种形状或颜色的组合,都需要创建一个新的子类,导致类的数量呈指数级增长。

使用桥接模式的情况:

现在,我们使用桥接模式来解决这个问题:

// 使用桥接模式的代码
interface Color {void applyColor();
}class Red implements Color {@Overridepublic void applyColor() {System.out.println("Applying red color");}
}class Green implements Color {@Overridepublic void applyColor() {System.out.println("Applying green color");}
}abstract class Shape {protected Color color;public Shape(Color color) {this.color = color;}abstract void draw();
}class Circle extends Shape {public Circle(Color color) {super(color);}@Overridevoid draw() {System.out.print("Drawing circle: ");color.applyColor();}
}class Rectangle extends Shape {public Rectangle(Color color) {super(color);}@Overridevoid draw() {System.out.print("Drawing rectangle: ");color.applyColor();}
}// 客户端代码
public class WithBridgePatternExample {public static void main(String[] args) {Shape redCircle = new Circle(new Red());redCircle.draw(); // Drawing circle: Applying red colorShape greenRectangle = new Rectangle(new Green());greenRectangle.draw(); // Drawing rectangle: Applying green color}
}

在这个例子中,通过使用桥接模式,我们将形状(CircleRectangle)和颜色(RedGreen)分离开来。这样,每个维度的变化都可以独立进行扩展,而不需要创建大量的子类。如果需要新增一种颜色或形状,只需添加相应的类即可,不会导致类的爆炸。桥接模式使得系统更加灵活,易于扩展和维护。

比如新增一个颜色后的代码

假设我们要新增一种颜色,比如蓝色(Blue),我们只需添加一个实现Color接口的Blue类,并在客户端中创建一个新的Shape对象,将这个新的颜色传递给它。

// 新增的蓝色类
class Blue implements Color {@Overridepublic void applyColor() {System.out.println("Applying blue color");}
}// 在客户端中使用新增的蓝色
public class AddNewColorExample {public static void main(String[] args) {Shape blueCircle = new Circle(new Blue());blueCircle.draw(); // Drawing circle: Applying blue color}
}

这里我们无需修改之前的形状类(Circle)或其他颜色类,而是通过新增一个实现Color接口的类来添加新的颜色。这就是桥接模式的灵活性体现之处。新增一个颜色并不会影响到其他部分的代码,保持了系统的可扩展性。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/305499.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

腾讯云服务器怎么选?腾讯云服务器最新优惠价格表来了!

腾讯云服务器租用价格表:轻量应用服务器2核2G3M价格62元一年、2核2G4M价格118元一年,540元三年、2核4G5M带宽218元一年,2核4G5M带宽756元三年、轻量4核8G12M服务器446元一年、646元15个月,云服务器CVM S5实例2核2G配置280.8元一年…

PyTorch 进阶指南,10个必须知道的原则

PyTorch 是一种流行的深度学习框架,它提供了强大的工具和灵活的接口,使得开发者能够搭建和训练各种神经网络模型。这份指南旨在为开发者提供一些有用的原则,以帮助他们在PyTorch中编写高效、可维护和可扩展的代码。 如果你对 Pytorch 还处于…

【unity3D-粒子系统】粒子系统主模块-Particle System篇

💗 未来的游戏开发程序媛,现在的努力学习菜鸡 💦本专栏是我关于游戏开发的学习笔记 🈶本篇是unity的粒子系统主模块-Particle System 基础知识 Particle System 介绍:粒子系统的主模块,是必需的模块&#x…

Python sanic框架钉钉和第三方打卡机实现

同样还是需要开通钉钉应用这里就不错多说了 第一步:梳理逻辑流程 前提:打卡的机器是使用postgres数据库,由于因为某些原因,钉钉userId 我已经提前获取到了存放到数据库里。 1.用户打卡成功后,我们应该监听数据库进行查询&#xf…

小米路由器2(R2D) 安装 MIXBOX

1. 先刷开发版 ROM http://www1.miwifi.com/miwifi_download.html 进入上述网页,找到 R2D 点击下载 开发版 ROM 教程 看 下载按钮上边的 “刷机教程” 刷机教程 2. 开启SSH工具 登录自己的小米账号后,里面会显示出 自己的 root密码; 默认…

用ChatGPT挑选钻石!著名珠宝商推出-珠宝GPT

根据Salesforce最新发布的第五版《互联网购物报告》显示,ChatGPT等生成式AI的出现、快速发展,对零售行业和购物者产生了较大影响。可有效简化业务流程实现降本增效,并改善购物体验。 著名珠宝商James Allen为了积极拥抱生成式AI全面提升销售…

力扣算法-Day14

第202题. 快乐数 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为: 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果这个过程 结…

磁盘相关知识

一、硬盘数据结构 1.扇区: 盘片被分为多个扇形区域,每个扇区存放512字节的数据(扇区越多容量越大) 存放数据的最小单位 512字节 (硬盘最小的存储单位是扇区,512 个字节,八个扇区组成一块&…

单文件超过4GB就无法拷贝到U盘?这个你一定要知道

前言 随着现在科技发展,小伙伴们所使用的数据也越变越大。还记得WindowsXP流行的时候,XP的镜像文件仅为几百MB大小。 但是现在随便一个系统就有可能超过4GB。 如果单个文件超过4GB就有可能没办法拷贝进U盘,在这里就需要给小伙伴们普及一下U…

腾讯云服务器怎么买划算?腾讯云服务器新用户优惠购买攻略

腾讯云轻量应用服务器购买指南,有两个入口,一个是在特价活动上购买,一个是在轻量应用服务器官方页面购买,特价活动上购买价格更便宜,轻量2核2G3M带宽服务器62元一年起,阿腾云atengyun.com分享腾讯云轻量应用…

文件的基础知识与读写

1.引入 如果没有⽂件,我们写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失了,等再次运⾏程序,是看不到上次程序的数据的,如果要将数据进⾏持久化的保存,我们可…

轻舟已过万重山,鸿蒙4.0程序员危机

现在是2023年末。自从华为推出的鸿蒙系统到现在已经有4年多。之前的鸿蒙系统只是基于Android套壳,因为这也也被无数人瞧不起,自从华为秋季发布会后,宣布鸿蒙4.0问世。不再兼容Android,华为做独立的系统终于打了翻身仗。 鸿蒙系统…