Featured image of post 设计模式入门

设计模式入门

本质

  • 是面向对象设计原则的实际运用

优点

  • 可以提高程序员的思维能力,编程能力和设计能力
  • 使程序设计更加标准化,代码编制更加工程化,软件开发效率大大提高,缩短了项目的开发周期
  • 使设计的代码可复用性高,可读性强,可靠性高,灵活性好,可维护性强

GoF23

  • 创建型模式:单例模式工厂模式,抽象工厂模式,建造者模式,原型模式
  • 结构型模式:适配器模式,桥接模式,装饰模式,组合模式,外观模式,享元模式,代理模式
  • 行为型模式:模板方法模式,命令模式,迭代器模式,观察者模式,中介者模式,备忘录模式,解释器模式,状态模式,策略模式,职责链模式,访问者模式

OOP七大原则

  1. 开闭原则:对扩展开放,对修改关闭(新增功能块不影响其他功能块的工作,能独立的工作)
  2. 里氏替换原则:继承必须确保父类所拥有的性质在子类中仍然成立(子类尽量不要重写父类的方法,要在原有的基础上扩展)
  3. 依赖倒置原则:要面向接口编程,不要面向实现编程
  4. 单一职责原则:控制类的粒度大小,将对象解耦,提高其内聚性(一个方法尽量做一件事情 )
  5. 接口隔离原则:要为各个类建立它们需要的专用接口
  6. 迪米特法则:只和你的直接朋友交谈,不跟 “ 陌生人” 讲话
  7. 合成复用原则:尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现

单例模式

饿汉式单例

  • 可能会浪费空间

懒汉式单例

  • 解决了饿汉式的弊端,在需要用的时候,再加载需要的对象

工厂模式

核心本质:实例化对象不使用new,用工厂方法替代

  • 简单工厂模式
  • 工厂方法模式
  • 抽象工厂模式

简单工厂模式(静态工厂模式)

对于增加的新的产品,需要覆盖已有代码

!虽然某种程度上不符合设计原则,但实际使用最多

工厂方法模式

在不修改已有类的前提下,通过增加新的工厂类实现扩展

抽象工厂模式

围绕一个超级工厂创建其他工厂,该超级工厂又称为其他工厂的工厂

建造者模式

优点

  • 产品的建造和表示分离,实现了解耦,使用建造者模式可以使客户端不必知道产品内部组成的细节
  • 将复杂产品的创建步骤分解在不同的方法中,使得创建过程更加清晰
  • 具体的建造者类之间是相互独立的,这有利于系统的扩展,增加新的具体建造者无需修改原有的代码,符合开闭原则

缺点

  • 建造者模式创建的产品一般具有较多的共同点,如果产品差异性很大,就不适合使用建造者模式
  • 如果产品的内部变化复杂,则需要定义很多具体建造者来实现这种变化,系统会变得很庞大

原型模式

实质是将创建的对象进行克隆,提高程序效率

适配器模式

例子 — 电脑 - 转接器 - 网线

桥接模式

最佳实践 – 一个类存在两个独立变化的维度,且这两个维度都需要进行扩展

静态代理

例子 — 租房的人,中介,房东

动态代理

  • 动态代理的代理类是动态生成的,不是我们直接写好的!
  • 动态代理分为两大类:基于接口的动态代理,基于类的动态代理