创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组
创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
今天说结构型设计模式里的桥接模式
结构型设计模式,其实就是通过封装或者组合的方式,优化改进代码结构
目的:解决多维度的变化
途径:变化封装,哪里变化封装哪里
缺点:代码复杂化,对于使用端需要了解更多细节
使用场景:有3个手机:苹果、诺基亚、OPPO,它们的系统分别是Iphone、Winphone、Android,
苹果手机对应iphone系统,
诺基亚手机对应winphone系统,
oppo手机对应android系统
那么: 苹果Class里实现Iphone
诺基亚Class里实现Winphone
OPPOClass里实现Android
如果业务增加,
苹果手机想拥有winphone系统和android系统,
诺基亚手机想拥有iPhone系统和android系统,
oppo手机想拥有iPhone系统和winphone系统,
那么: 新增苹果2Class里实现winphone
新增苹果3Class里实现android
新增诺基亚2Class里实现iPhone
新增诺基亚3Class里实现android
新增OPPO2Class里实现iPhone
新增OPPO3Class里实现winphone
那么问题来了,类的数量=手机品牌数量M * 系统数量N, 如果手机品牌继续增加,系统数量也继续增加,那么类的数量将是成倍数的增加,如果再引入美版、港版、大陆版,那么类的数量将继续成倍增加
为了解决多维度的变化,就诞生了桥接模式来解决这类问题
把系统和手机还有版本分离开
把系统封装成接口,由Iphone、winphone、android去实现它
把手机封装成接口,由苹果、诺基亚、OPPO去实现它
把版本封装成接口,由美版、港版、大陆版去实现它
这样的话,哪个手机想实现什么系统,想拥有什么版本,直接在上端灵活的去调用即可,既方便扩展,同时,类的数量=手机品牌数量M +系统数量N
总结:桥接模式通过变化封装,解决多维度的变化,既方便扩展,又减少类的数量,同时也实现了解耦,但是缺点也很明显,就是代码复杂了,使用端需要了解更多的细节(知道手机的品牌,还要知道手机的系统和手机的版本,才能去灵活调用)。所以,如果简单的逻辑,直接用即可,不必刻意使用桥接模式去解决问题。
以上是本人通过学习,去理解和总结的,如果有什么不当之处,还请大牛指正!