介绍
桥接模式(Bridge Pattern)是一种结构型设计模式,通过将抽象部分与它的实现部分分离,使它们都能够独立地变化。它的核心思想是将接口与实现解耦,从而使得两者可以独立地变化。
1.定义
桥接模式将抽象部分与它的实现部分分离,使它们都可以独立地变化。
2. 主要作用
- 解耦:桥接模式通过将抽象和实现分离,降低了系统的耦合度。
- 扩展性:可以灵活地添加新的实现类和抽象类,而无需修改现有代码。
- 减少类的数量:通过组合的方式,避免了大量的子类产生,降低了系统的复杂性。
3. 解决的问题
- 类的数量急剧增加,导致管理和维护困难。
- 修改一个实现类可能会影响多个子类,增加了系统的脆弱性。
- 不同的实现类可能会在抽象类中被硬编码,缺乏灵活性。
4. 模式原理
包含角色:
- Abstraction(抽象类): 定义抽象类的接口,维护一个指向 Implementor 类型对象的指针。
- RefinedAbstraction(细化抽象类): 扩展抽象类,并实现具体业务逻辑。
- Implementor(实现类接口): 定义实现类的接口,不一定与抽象类的接口完全一致。
- ConcreteImplementor(具体实现类): 实现 Implementor 接口,并完成具体业务。
UML类图:
代码示例:
以图形绘制为例,展示如何使用桥接模式来分离图形(形状)与绘制方式(颜色)
interface Color {
void applyColor();
}
class RedColor implements Color {
public void applyColor() {
System.out.println("Red.");
}
}
class GreenColor implements Color {
public void applyColor() {
System.out.println("Green.");
}
}
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);
}
public void draw() {
System.out.print("Circle filled with color ");
color.applyColor();
}
}
class Square extends Shape {
public Square(Color color) {
super(color);
}
public void draw() {
System.out.print("Square filled with color ");
color.applyColor();
}
}
调用
public class BridgePatternDemo {
public static void main(String[] args) {
Shape redCircle = new Circle(new RedColor());
Shape greenSquare = new Square(new GreenColor());
redCircle.draw();
greenSquare.draw();
}
}
打印输出
Circle filled with color Red.
Square filled with color Green.
我觉得桥接模式的含义就两个字 分离
,就像上面定义讲的,部分分离,独立变化,了解这点就明白了桥接模式的核心意义。
桥接模式的应用在我们生活中也很常见,比如一个大公司有许多部门,他们相互独立,又存在联系,各司其职,共同组成了公司的架构,可想而知,如果一家公司不存在部分划分,你既是开发又是测试,既是老板又是财务,那么运行起来是多么混乱。
举一反三
Java 的 I/O 库使用了桥接模式。InputStream
和 OutputStream
是抽象类,定义了输入和输出的基本操作,而各种具体的实现类(如 FileInputStream
、BufferedInputStream
等)则实现了这些操作。
Reader
和 Writer
类可以被视为实现类接口。而FileReader
和 FileWriter
则可以被视为具体实现类.
可以总结如下:
Abstraction: InputStream 和 OutputStream
RefinedAbstraction: FileInputStream 和 FileOutputStream
Implementor: Reader 和 Writer
ConcreteImplementor: FileReader 和 FileWriter
5. 优缺点
优点
- 灵活性:可以在运行时切换不同的实现。
- 易于扩展:可以通过增加新类而不是修改现有类来扩展系统。
- 降低了系统复杂性:通过组合而非继承减少了类的数量。
缺点
- 增加复杂性:引入了额外的抽象层次,增加了系统的复杂性。
- 理解难度:对于初学者来说,理解桥接模式可能有一定难度。
桥接模式使用的不多,需要合理设计抽象与实现的分离,初期可能会有较高的设计成本。要是你的目标是个架构师,这个还是必须要掌握的。
6. 应用场景
- 当一个类存在多个独立维度的变化时,可以使用桥接模式将这些维度分离开。
- 当系统中存在多个组合变化时,通过桥接模式可以避免类的数量急剧增加。
- 需要将抽象部分与实现部分解耦时。
7. 总结
桥接模式是一个强大且灵活的设计模式,通过将抽象与实现分离,降低了系统的耦合度和复杂性。虽然引入了额外的抽象层,但在需要高度灵活性和可扩展性的场景中,它提供了一种优雅的解决方案。在实际开发中,合理使用桥接模式能够有效提升系统的可维护性和可扩展性。
1、本站所有资源均从互联网上收集整理而来,仅供学习交流之用,因此不包含技术服务请大家谅解!
2、本站不提供任何实质性的付费和支付资源,所有需要积分下载的资源均为网站运营赞助费用或者线下劳务费用!
3、本站所有资源仅用于学习及研究使用,您必须在下载后的24小时内删除所下载资源,切勿用于商业用途,否则由此引发的法律纠纷及连带责任本站和发布者概不承担!
4、本站站内提供的所有可下载资源,本站保证未做任何负面改动(不包含修复bug和完善功能等正面优化或二次开发),但本站不保证资源的准确性、安全性和完整性,用户下载后自行斟酌,我们以交流学习为目的,并不是所有的源码都100%无错或无bug!如有链接无法下载、失效或广告,请联系客服处理!
5、本站资源除标明原创外均来自网络整理,版权归原作者或本站特约原创作者所有,如侵犯到您的合法权益,请立即告知本站,本站将及时予与删除并致以最深的歉意!
6、如果您也有好的资源或教程,您可以投稿发布,成功分享后有站币奖励和额外收入!
7、如果您喜欢该资源,请支持官方正版资源,以得到更好的正版服务!
8、请您认真阅读上述内容,注册本站用户或下载本站资源即您同意上述内容!
原文链接:https://www.dandroid.cn/archives/22424,转载请注明出处。
评论0