趣学设计模式 之 桥接模式
创作时间:
作者:
@小白创作中心
趣学设计模式 之 桥接模式
引用
CSDN
1.
https://blog.csdn.net/qq_56158663/article/details/145855198
一、 啥是桥接模式?
想象一下,你想要画不同形状的图形 🎨 (比如:圆形、矩形),并且你想用不同的颜色来填充这些图形 🖍️ (比如:红色、蓝色)。 你希望你的程序能够支持所有形状的图形用所有颜色来填充,而且以后还可以方便地添加新的形状和新的颜色 ➕。
桥接模式,就是将抽象部分与实现部分分离,使它们都可以独立地变化!它可以让你在不修改原有代码的基础上,扩展抽象部分和实现部分的功能 ➕。
简单来说,就是把两个变化维度分开,让他们各自独立发展!↔️
- 你有两个或多个独立的维度需要变化:就像图形的形状和图形的颜色是两个独立的维度 🎨🖍️!
- 你想避免类爆炸:就像你不想为每种形状和颜色的组合都创建一个新的类 🔴圆形, 🟦矩形!
- 你想让抽象部分和实现部分可以独立地扩展:就像你想方便地添加新的图形形状和新的颜色 ➕!
二、 为什么要用桥接模式?
用桥接模式,好处多多 👍:
- 分离抽象和实现:将抽象部分和实现部分分离,降低耦合度 🔗!
- 扩展性好:可以独立地扩展抽象部分和实现部分的功能 ➕!
- 灵活性高:可以动态地组合不同的抽象部分和实现部分,实现不同的功能组合 🤸!
- 避免了类爆炸问题:不需要创建大量的子类,减少了类的数量 💥!
三、 桥接模式的实现方式
桥接模式主要包含以下几个角色:
- Abstraction(抽象类):定义抽象类的接口,维护一个指向Implementor类型对象的引用。 🎨 (比如:图形)
- RefinedAbstraction(细化抽象类):扩展抽象类定义的接口。 🎨 (比如:带边框的图形)
- Implementor(实现类接口):定义实现类的接口,这个接口不一定要与Abstraction的接口完全一致,事实上这两个接口可以完全不同。 通常Implementor接口提供基本操作,而Abstraction接口提供基于这些基本操作的较高层次的操作。 🖍️ (比如:颜色)
- ConcreteImplementor(具体实现类):实现Implementor接口并定义它的具体实现。 🖍️ (比如:红色、蓝色)
代码示例:
// 实现类接口:颜色
public interface Color {
String fill(); // 填充颜色
}
// 具体实现类:红色
public class Red implements Color {
@Override
public String fill() {
return "红色";
}
}
// 具体实现类:蓝色
public class Blue implements Color {
@Override
public String fill() {
return "蓝色";
}
}
// 抽象类:图形
public abstract class Shape {
protected Color color; // 组合颜色对象
public Shape(Color color) {
this.color = color;
}
public abstract String draw(); // 绘制图形
}
// 细化抽象类:圆形
public class Circle extends Shape {
public Circle(Color color) {
super(color);
}
@Override
public String draw() {
return "绘制圆形,填充" + color.fill();
}
}
// 细化抽象类:矩形
public class Rectangle extends Shape {
public Rectangle(Color color) {
super(color);
}
@Override
public String draw() {
return "绘制矩形,填充" + color.fill();
}
}
// 客户端
public class Client {
public static void main(String[] args) {
Color red = new Red(); // 创建红色对象
Shape circle = new Circle(red); // 创建红色圆形对象
System.out.println(circle.draw()); // 绘制红色圆形
Color blue = new Blue(); // 创建蓝色对象
Shape rectangle = new Rectangle(blue); // 创建蓝色矩形对象
System.out.println(rectangle.draw()); // 绘制蓝色矩形
}
}
分析:
Color是实现类接口,定义了颜色的填充方法。Red和Blue是具体实现类,分别实现了红色和蓝色。Shape是抽象类,组合了颜色对象,并定义了绘制图形的方法。Circle和Rectangle是细化抽象类,分别实现了圆形和矩形。
输出结果:
绘制圆形,填充红色
绘制矩形,填充蓝色
四、 桥接模式的优缺点
优点:
- 分离抽象和实现 🔗!
- 扩展性好 ➕!
- 灵活性高 🤸!
- 避免了类爆炸问题 💥!
缺点:
- 增加了系统的复杂度 😫!
- 需要识别出两个独立的维度,设计难度较高 🧠!
五、 桥接模式的应用场景
- 当一个类存在两个或多个独立变化的维度,且这两个维度都需要扩展时:就像图形的形状和图形的颜色 🎨🖍️!
- 当一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性时:就像需要动态地组合不同的图形和颜色 🎨🖍️!
- 避免类爆炸:就像避免为每种形状和颜色的组合都创建一个新的类 🔴圆形, 🟦矩形!
- 跨平台GUI库:不同的操作系统有不同的GUI实现,桥接模式可以将GUI的抽象接口与具体的操作系统实现分离。
六、 总结
- 桥接模式就像把两个变化维度分开,让他们各自独立发展! ↔️
- 主要包含抽象类、细化抽象类、实现类接口和具体实现类四个角色! 🎭
- 优点是分离抽象和实现、扩展性好、灵活性高、避免类爆炸! 👍
- 缺点是增加复杂度、设计难度较高! 👎
- 适用于存在两个或多个独立变化的维度,且这两个维度都需要扩展的场景! 🎯
希望这篇文章能让你更容易理解桥接模式! 💯 祝你学习愉快! 😄
热门推荐
遵医嘱、重监测:高血压患者科学用药五大要点
冬季降压有讲究:高血压患者的饮食调整指南
山楂降压胶囊降压效果有限,需配合西药使用
Lorundrostat/Zilebesiran:高血压治疗领域的新星药物
遗传、内分泌等致宝宝断掌纹,需及时诊断治疗
掌纹科学解读:形成原因与实用价值,断掌与疾病关系
自制炸串,秒杀街边小吃!
乐山炸串爆红:从地方小吃到网红爆品
老李师傅教你炸串绝技,秒变美食达人!
乾隆皇帝的火锅盛宴,你敢挑战吗?
夏季脚气高发,派瑞松软膏来救场!
Z世代偏重心理保健,婴儿潮关注营养:食品消费代际分化明显
团队建设新花样:师生同事一起嗨
清华大学教授彭凯平:教师活力是提升师生关系的关键
彭凯平教授教你高效沟通技巧
崔佳博士教你构建良好师生关系
东北美食探秘:尖椒干豆腐的营养密码
200名特警集结广州,多科目实战演练提升反恐能力
唐山“菜刀队”覆灭记:从街头恶势力到全国严打导火索
红楼梦人物关系详解:四大家族与嫡庶制度
武乡中学举办中学生领导力展示会,三大环节助力青年成长
专家提醒:肝脏不好不是不能吃面条,但这些食物要少吃
红烧茄子的神仙食材,你选对了吗?
情绪激动时为何会流泪?生理反应与心理效应的双重解读
哭泣不是软弱:眼泪的生理密码与心理价值
张玉宁进球后流泪,原来情绪眼泪藏着这些秘密
物业服务合同的关键服务事项与服务质量
如何提升和改善房地产项目的物业管理水平和服务质量并进行有效监督?
北海必游两处:文艺流下村与中西合璧百年老街
福建官洋村入选联合国“最佳旅游乡村”,三文化交融打造乡村振兴样本