热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

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
 
总结:桥接模式通过变化封装,解决多维度的变化,既方便扩展,又减少类的数量,同时也实现了解耦,但是缺点也很明显,就是代码复杂了,使用端需要了解更多的细节(知道手机的品牌,还要知道手机的系统和手机的版本,才能去灵活调用)。所以,如果简单的逻辑,直接用即可,不必刻意使用桥接模式去解决问题。
 
以上是本人通过学习,去理解和总结的,如果有什么不当之处,还请大牛指正!
 
 
    

推荐阅读
  • 三星Galaxy S8/S8+即将登场,全面解析新旗舰
    3月29日晚11点,备受瞩目的三星Galaxy S8/S8+将正式发布。作为三星在Note 7爆炸事件后的重磅产品,S8/S8+不仅承载着恢复消费者信心的重任,其创新的设计和技术也备受期待。 ... [详细]
  • 本文将带您了解Cocos家族的不同版本和分支,特别是Cocos Creator的发展历程及其核心特性,帮助初学者快速入门。 ... [详细]
  • Vue 开发与调试工具指南
    本文介绍了如何使用 Vue 调试工具,包括克隆仓库、安装依赖包、构建项目以及在 Chrome 浏览器中加载扩展的详细步骤。 ... [详细]
  • 智慧城市建设现状及未来趋势
    随着新基建政策的推进及‘十四五’规划的实施,我国正步入以5G、人工智能等先进技术引领的智慧经济新时代。规划强调加速数字化转型,促进数字政府建设,新基建政策亦倡导城市基础设施的全面数字化。本文探讨了智慧城市的发展背景、全球及国内进展、市场规模、架构设计,以及百度、阿里、腾讯、华为等领军企业在该领域的布局策略。 ... [详细]
  • C语言入门精选教程与书籍推荐
    本文精选了几本适合不同水平学习者的C语言书籍,从基础入门到进阶提高,帮助读者全面掌握C语言的核心知识和技术。 ... [详细]
  • Web App vs Native App:未来的移动应用趋势
    随着移动互联网的发展,Web App和Native App之间的竞争日益激烈。对于开发者而言,选择哪一种技术路径更为明智?本文将深入探讨两种应用模式的特点及未来趋势。 ... [详细]
  • 智能投顾机器人:创业者如何应对新挑战?
    随着智能投顾技术在二级市场的兴起,针对一级市场的智能投顾也逐渐崭露头角。近日,一款名为阿尔妮塔的人工智能创投机器人正式发布,它将如何改变投资人的工作方式和创业者的融资策略? ... [详细]
  • 本文详细介绍了C语言中的基本数据类型,包括整型、浮点型、字符型及其各自的子类型,并探讨了这些类型在不同编译环境下的表现。 ... [详细]
  • 本文详细介绍了虚拟专用网(Virtual Private Network, VPN)的概念及其通过公共网络(如互联网)构建临时且安全连接的技术特点。文章探讨了不同类型的隧道协议,包括第二层和第三层隧道协议,并提供了针对IPSec、GRE以及MPLS VPN的具体配置指导。 ... [详细]
  • Java多重继承的替代方案及设计考量
    本文探讨了Java为何不支持多重继承,并深入分析了其背后的原理和替代方案。通过理解Java的设计哲学,开发者可以更好地利用接口和其他特性来实现复杂的类结构。 ... [详细]
  • 在寻找轻量级Ruby Web框架的过程中,您可能会遇到Sinatra和Ramaze。两者都以简洁、轻便著称,但它们之间存在一些关键区别。本文将探讨这些差异,并提供详细的分析,帮助您做出最佳选择。 ... [详细]
  • CentOS 7 下构建 Elasticsearch 7.6.2 集群详解
    本文详细介绍了如何在 CentOS 7 系统中搭建 Elasticsearch 7.6.2 的集群环境,包括必要的配置步骤和注意事项。 ... [详细]
  • java文本编辑器,java文本编辑器设计思路
    java文本编辑器,java文本编辑器设计思路 ... [详细]
  • 本文详细介绍了如何正确配置Java环境变量PATH,以确保JDK安装完成后能够正常运行。文章不仅涵盖了基本的环境变量设置步骤,还提供了针对不同操作系统下的具体操作指南。 ... [详细]
  • 本文介绍如何在 Visual Studio Code 中使用 Jupyter Notebook 插件,包括创建、编辑和运行笔记本的基本操作。 ... [详细]
author-avatar
李纯皓_922
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有