设计模式
设计模式的定义
模式:模式是在特定环境下人们解决某类重复出现问题的一套成功或有效的解决方案。
软件模式:在一定条件下的软件开发问题及其解法。
设计模式的分类
根据目的(模式是用来做什么的)可分为创建型(Creational),结构型(Structural)和行为型(Behavioral)三类:
- 创建型模式主要用于创建对象
- 结构型模式主要用于处理类或对象的组合
- 行为型模式主要用于描述类或对象如何交互和怎样分配职责
根据范围,即模式主要是处理类之间的关系还是处理对象之间的关系,可分为类模式和对象模式两种:
- 类模式处理类和子类之间的关系,这些关系通过继承建立,在编译时刻就被确定下来,是一种静态关系
- 对象模式处理对象间的关系,这些关系在运行时变化,更具动态性
设计模式的特点
- 针对接口编程
- 优先使用对象组合,而不是类继承
- 找到并封装变化点 => 达成高内聚合低耦合,提高复用
面向对象设计原则
单一职责原则(SRP)
单一职责原则:一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中。
单一职责原则的优点:
- 降低类的复杂度
- 提高类的可读性
- 提高系统的可维护性
- 变更引起的风险降低
开闭原则(OCP)
开闭原则:软件实体应当对扩展开放,对修改关闭。
里氏替换原则(LSP)
里氏替换原则:继承必须确保超类的所拥有的性质在子类中仍然成立。
在软件中将一个基类对象替换成它的子类对象,程序将不会产生任何错误和异 常,反过来则不成立。
依赖倒转原则(DIP)
依赖倒转原则:高层模块不应该依赖低层模块,它们都应该依赖抽象。抽象不应该依赖于细节,细节应该依赖于抽象。(要针对接口编程,不要针对实现编程)
针对抽象层编程,将具体类的对象通过依赖注入(DI)的方式注入到其他对象
接口隔离原则(ISP)
接口隔离原则:客户端不应该依赖那些它不需要的接口。
迪米特法则(LKP)
迪米特法则:每一个软件单位对其他的单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位。
合成复用原则(CRP)
合成复用原则:优先使用对象组合,而不是继承来达到复用的目的。