design pattern

Design Pattern

设计模式

image

面向对象设计原则

  • 单一职责: 一个对象应该只包含单一的职责(一个类干一件事)
  • 开闭原则:对扩展开放,对修改关闭(只加不改)
  • 里氏替换原则: 所有引用基类的地方必须能够透明地使用其子类的对象(应传入父类的时候传入子类也可以
  • 依赖倒置原则: 高层模块不应该依赖底层模块,他们都应该依赖抽象(类不应该继承实体类,应该继承实体类的父接口)
  • 接口隔离原则: 客户端不应该依赖那些他不需要的接口
  • 迪米特原则: 只需要保存自己所需要的全部知识。
  • 合成复用原则: 面向组合编程,避免继承

创建型模式

控制和影响一个实例化对象的创建过程

  • 工厂模式和抽象工厂控制实例对象时候的类选择
  • 建造者模式控制多个类以相同的流程实例化
  • 原型模式通过深度复制原型类让类的多个实例化更加的迅速
  • 单例模式让类的实例化对象只存在一个

结构型模式:

处理类间或系统间的关系

  • 适配器模式: 将其他类或系统中的方法封装一个统一接口来调用,从而达到适配各种系统方法的目的。(针对不匹配的接口,再封装一个类,对不匹配接口进行修饰,提供给目标类)
  • 桥接模式: 处理部分(类)与实体(实例化)之间的结构,可以使抽象部分和实例化部分单独变化不干扰。(把多个具体类的抽象作为客户端类的属性,然后执行函数时,传入实例化的具体类)
  • 组合模式: 用于设计一个有层次等级的系统,处理各层次之间的关系。(A对象作为B对象的属性,A和B对象同类型)
  • 装饰模式: 用于扩展一个类或者系统的功能。(对类进行封装,然后对外提供接口不变,内部实现一些补充功能)
  • 外观模式:为子系统中相似功能设计一组统一的界面或接口. (如果几个类有相同的操作,就写个类,把他们的某些操作绑定一下,避免多次操作)大家共享一个类就行了
  • 享元模式:让小粒度高频使用的类被共享,减少实例化过程,减少损耗。(把类里面非共享的属性拿出来通过参数传进去,然后大家共享一个类就行了)
  • 代理模式: 用于控制一个对象的访问,仅允许通过代理访问对象。(不要直接访问某些类,再写个类,把要访问的类作为属性,间接去访问)

行为型模式:

解决不同实体通信的问题

  • 解释器模式: 定义一种解释,根据传入的参数和解释进行匹配,然后执行相应的动作。
  • 模板方法模式: 定义一个模板,模板内的执行流程是固定的,但是每个流程的动作是可变的。(按顺序执行几个动作,但是每个动作里面具体干什么事情可以自定义)
  • 责任链模式: 将多个处理方法连接成一个链条(通过组合),然后按条件决定是否处理请求还是转发。
  • 命令模式: 找个类,专门创建命令,然后丢给接收者,接受者接收命令,然后选择对应的执行者来执行命令。
  • 迭代器模式: 对外提供一个接口,实现顺序访问聚合数据,但是不对外暴露
  • 中介者模式: 将其他对象之间的交互装在中介者对象中,达到松耦合、隐式引用、独立变化。(类太多了,找个中间类,把几个类的操作绑定在一起,实现简洁)
  • 备忘录模式: 在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态(创建一个备忘录(类),然后把另外一个类的实例存起来)
  • 观察者模式: 核心抽象对象管理所有依赖他的其他类,并在设计中使其在发生变动时,主动通知并更新其他类。(在类中拥有其他类的实例,当数据变化时,调用相应实例的方法)
  • 状态模式: 当对象的内部状态改变的时候,允许对象执行不同的流程,看起来就像改写了一个对象。(在一个类中,根据某个属性的不同值,来调用不同的其他类实例的方法)
  • 策略模式: 策略模式,让一个类的行为或其算法可以在运行时更改,策略是让实例化对象动态的更改自身的某些方法.(在运行的时候,把方法的属性赋值一个新方法,执行不同的策略)
  • 访问者模式: 将数据结构和作用于结构上的操作解耦。(一个数据类,有很多操作时,封装成具有统一接口的多个访问者(类),提供给客户端调用)