什么是设计模式?

百度百科:

设计模式(英语 design pattern)是对面向对象设计中反复出现的问题的解决方案。这个术语是在1990年代由Erich Gamma等人从建筑设计领域引入到计算机科学中来的。这个术语的含义还存有争议。算法不是设计模式,因为算法致力于解决问题而非设计问题。设计模式通常描述了一组相互紧密作用的类与对象。设计模式提供一种讨论软件设计的公共语言,使得熟练设计者的设计经验可以被初学者和其他设计者掌握。设计模式还为软件重构提供了目标。

设计模式分为三大类:

创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式

结构型模式,共七种:适配器模式、装饰者模式、代理模式、外观模式、桥接模式、组合模式、享元模式。

行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

其实还有两类:并发型模式和线程池模式。

设计模式的模式原则是啥?

单一职责原则

类的职责单一:一个类应该只有一个发生变化的原因(实现软件灵活的前提)

不仅仅适用于接口,类还有方法

开放封闭原则(OCP,Open Closed Principle

所有面向对象的核心 对扩展开放 对修改关闭

1.通过扩展已有的软件系统,可以提供新的行为,以满足对软件的新需求,是变化中的软件有一定的适应性和灵活性。 2.已有的软件模块,特别是最重要的抽象模块不能再修改,这就使变化中的软件系统有一定的稳定性和延续性

里氏替换原则

类似于多态但又不同于多态,多态是面向编程的一大特性,也是面向对象编程语言的一种语法。它是一种代码实现的思路。而里氏替换原则是一种设计原则,是用来指导继承关系中子类该如何设计的,子类的设计要保证替换父类的时候,不改变原有程序的逻辑以及不破坏原有程序的正确性。

  1. 子类必须完全实现父类的方法;
  2. 子类可以有自己的方法
  3. 覆盖或实现父类方法时,输入参数可以放大
  4. 覆盖或实现父类的方法时,返回值要变小

依赖倒置原则

面向接口编程

含义:

  1. 高层模块不应该依赖底层模块,二者都依赖于抽象
  2. 抽象不应该依赖于细节
  3. 细节应该依赖于抽象

编程原则:

  1. 每个接口尽量有接口或抽象类
  2. 变量的表面类型尽量是接口或抽象类
  3. 尽量不要覆盖写基类的方法,类间依赖的是抽象,复写了抽象的方法会对依赖的稳定性造成一定的影响

接口隔离原则

这个原则强调 高内聚低耦合,客户端不应该依赖于它不需要的接口

  1. 接口要尽量的小,在保证单一职责原则的前提
  2. 接口要高内聚 ,提高接口、类和模块的处理能力,减少对外的交互
  3. 定制服务,单独为一个个体提供优良的服务
  4. 接口设计是有限度的: 接口设计的粒度越小,程序越灵活,但是也会使得结构复杂化,会降低程序的维护

迪米特原则

也称为最小知识原则:一个类对于其他类知道的越少越好,就是说一个对象应当对其他对象有尽可能少的了解,只和朋友通信,不和陌生人说话