zoukankan      html  css  js  c++  java
  • 23种设计模式,每天一种设计模式

    创建型模式,共五种:工厂方法模式抽象工厂模式单例模式建造者模式原型模式
    结构型模式,共七种:适配器模式装饰器模式代理模式外观模式桥接模式组合模式享元模式
    行为型模式,共十一种:策略模式模板方法模式观察者模式迭代子模式责任链模式命令模式备忘录模式状态模式访问者模式中介者模式解释器模式
     
    今天说结构型设计模式里的桥接模式
     
    结构型设计模式,其实就是通过封装或者组合的方式,优化改进代码结构
     
    目的:解决多维度的变化
    途径:变化封装,哪里变化封装哪里
    缺点:代码复杂化,对于使用端需要了解更多细节
     
     
    使用场景:有3个手机:苹果诺基亚OPPO,它们的系统分别是IphoneWinphoneAndroid
        苹果手机对应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
     
    总结:桥接模式通过变化封装,解决多维度的变化,既方便扩展,又减少类的数量,同时也实现了解耦,但是缺点也很明显,就是代码复杂了,使用端需要了解更多的细节(知道手机的品牌,还要知道手机的系统和手机的版本,才能去灵活调用)。所以,如果简单的逻辑,直接用即可,不必刻意使用桥接模式去解决问题。
     
    以上是本人通过学习,去理解和总结的,如果有什么不当之处,还请大牛指正!
     
     
        
  • 相关阅读:
    高斯消元
    UVa12103
    UVa10294
    UVa11762
    牛客网算法工程师能力评估
    华为研发工程师编程题
    网易2017春招笔试真题编程题集合
    2017网易有道内推编程题
    2017网易雷火实习生招聘编程题
    数组---面试知识点整理
  • 原文地址:https://www.cnblogs.com/baixiaoguang/p/8259742.html
Copyright © 2011-2022 走看看