桥接模式(Bridge Mode):属于结构模式的一种。看过我上篇策略模式时会发现它们在代码层面非常相似,UML图长的一模一样,它们写法完全一模一样。我们完全可以将它放在一起记忆。记一下区别就好了。桥接模式属于结构型模式,策略模式属于行为型模式,从分类上看侧重点不同,前者强调结构,后者强调行为。前者强调抽象与实现的分离,后者强调算法可替代。桥接模式是调用端和被调用端都可以变化,策略模式是只有被调用端变化。桥接模式应用了接口隔离原则,抽象与实现分离,原因它们都会变化,所以用聚合来替代继承。
桥接模式 | 策略模式 |
---|---|
结构型模式,强调结构 | 行为型模式,强调行为 |
强调抽象和实现的分离 | 强调算法可替代 |
使用聚合替代继承,避免类爆炸,扩展不灵活 | 一个类里面 某个方法的实现 会有多种变化 但运行时不确定用哪种实现,避免使用if else,将方法提升到类的层次。 |
目录
1. 意图:
主要解决:在有很多种可能会变化的情况下,用继承会造成类爆炸的问题,扩展起来不灵活。
定义:将抽象部分与实现部分分离,使它们都可以独立的变化。
2. 如何使用:
如何解决:把这种多角度类分离出来,让它们可以独立变化,减少它们之间的耦合
优点:1.抽象和实现分离。2.优秀的扩展能力。3.实现细节对客户透明。
缺点:桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开放者针对抽象进行设计与编程。
使用场景:1.一个类存在两个独立变化的维度,且这两个维度都需要进行扩展。2.对于不希望使用继承或因为多层次继承导致系统类的个数急剧增加的系统,桥接模式尤为适用。
3.如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的继承联系,通过桥接模式可以使它们在抽象层建立一个关联关系。
注意事项:对于两个独立变化的维度,使用桥接模式再合适不过了。
3. UML模板:
4. 关键代码: