大话设计模式

第1章 代码无错就行?——简单工厂模式

面向对象:活字印刷的例子(可维护,可复用,可扩展,灵活性好)

实现计算器:

  • 直接实现,简单粗暴
  • 让业务逻辑跟界面逻辑分开,耦合度降低(分装)
  • 面向对象的三大特性:封装,多态,继承
  • 加减乘除运算方法分开(多态)
  • 加减乘除运算类分开(简单工程模式)

UML类图

第2章 商场促销——策略模式

超市打折:

  • 直接实现,简单粗暴

  • 业务逻辑跟界面逻辑分开(封装)

  • 打五折,满五百减二百(简单工厂)

    简单工厂只解决了对象的创建问题,如果需要经常更换打折额度,岂不是要频繁改动工厂?

  • 满一百送十积分(策略模式)

  • 将判断过程移走(策略模式+简单工厂)

对比 简单工厂模式 策略模式
核心思想 关注对象的创建过程 关注定义可替换的算法
应用场景 用于对象的创建和管理 用于定义算法族
目的和结构 降低对象创建复杂性 定义策略多样性
使用时机 在对象创建时被调用 在对象使用时被调用
灵活性和可扩展性 容易已你如新产品类型,可能增加工厂复杂性 容易引入新策略,不影响已有策略实现

第3章 拍摄UFO——单一职责原则

拍摄UFO:功能太多太杂 –> 就一个类而言,应该仅有一个引起它变化的原因

俄罗斯方块设计:将界面与游戏逻辑(下落、旋转、碰撞等)分离开

第4章 考研求职两不误——开放-封闭原则

开-闭:软件实体(类、模块等)应该可以扩展,但不能修改

过犹不及,拒绝不成熟的抽象

第5章 会修电脑不会修收音机?——依赖倒转原则

抽象不应该依赖细节,细节应该依赖于抽象,针对接口编程,不要对实现编程

高层模块不应该依赖低层模块,两个都应该依赖抽象

里氏代换原则:子类型必须能够替换掉它们的父类型 –> 子类能够添加新的行为

第6章 穿什么有这么重要?——装饰模式

搭配衣服:

  • 直接实现,简单粗暴
  • 服饰类抽象出来
  • 装饰模式:动态地给一个对象添加一些额外的职责

​ Component:对象接口 ConcreteComponent:具体对象 Decorator:装饰抽象类

第7章 为别人做嫁衣——代理模式

追求娇娇:

  • 没有代理对象
  • 只有代理对象
  • 符合实际

代理模式的应用场景:远程代理;虚拟代理;安全代理;智能指引

第8章 雷锋依然在人间——工厂方法模式

计算器实现:

  • 简单工厂实现(加减乘除继承工厂)
  • 工厂方法实现(各建一个具体工厂)
  • 简单工厂的好处:去除了与具体产品的依赖;但需要加一个算法时,需要修改工厂类,违反开闭原则
  • 雷锋做好事实现

第9章 简历复印——原型模式

简历类:

  • 直接实现,简单粗暴
  • 原型模式(从一个对象创建另一个可定制的对象)
  • 浅复制:只有相同值,引用仍指向原对象;深复制:把引用的对象都复制一遍,引用指向新对象
  • 工作经历也实现clone方法(深复制)

第10章 考题抄错会做也白搭——模板方法模式

手抄题,题目抄错–>考试试卷,标准化

抄题目:

  • 甲乙两人抄试卷,直接实现,简单粗暴
  • 代码提炼(试卷父类)
  • 模板方法(重写(答案)虚方法,父类建立所有重复的模板)
  • 特点:把不变行为搬到父类,去除子类中的重复代码

第11章 无熟人难办事?——迪米特法则

迪米特法则:最少知识原则,强调类之间的松耦合,只需要认识IT部主管就行

第12章 牛市股票还会亏钱?——外观模式

股民炒股:

  • 直接实现,简单暴力
  • 基金版(外观模式)
  • 为子系统的一组接口提供一个一致的界面,什么时候使用:设计初期,开发阶段,后期维护

第13章 好菜每回味不同——建造者模式

建造小人:

  • 直接实现,简单粗暴(可能少了一条腿)
  • 分离类(但解决不了问题)
  • 过程稳定(头手脚)细节不同(高矮胖瘦)

Builder类,ConcreteBuilder具体实现类,Director指挥者类(用来控制建造过程,隔离用户与建造过程的关联)

第14章 老板回来,我不知道——观察者模式

观察老板:

  • 前台 –> 同事(相互耦合)
  • 解耦实践一(观察者抽象出来了)
  • 解耦实践二(通知者也抽象出来了)
  • 特点:依赖倒转,解除耦合
  • 事件委托:去掉抽象观察者,将具体观察者类的更新委托给通知者类

第15章 就不能不换DB吗?——抽象工厂模式

更换数据库:

  • 最基本的数据访问程序

  • 使用工厂方法模式(一旦更改功能需要改动的地方很多,表类也很多)

  • 使用抽象工厂模式AbstractProductA AbstractProductB AbstractFactory(添加新表麻烦)

    好处:易于交换产品系列;创建实例过程与客户端分离

  • 简单工厂改进抽象工厂(添加新工厂麻烦)

  • 反射+抽象工厂

  • 反射+配置文件

第16章 无尽加班何时休——状态模式

一天工作状态变化:

  • 面向过程,直接用方法实现
  • 分类版(工作类,客户端):方法过长,判断过多
  • 状态模式:可以把复杂的判断逻辑简化 State抽象状态类,ConcreteState具体状态类,Context类维护一个ConcreteState的实例,定义当前状态
  • 工作状态——状态模式版

本站由[Lito] 使用 [Stellar 1.29.1] 主题创建。 本博客所有文章除特别声明外,均采用[CC BY-NC-SA 4.0] 许可协议,转载请注明出处。

本"页面"访问 次 | 👀总访问 次 | 🥷总访客