设计模式:
- Context(前提条件)
- Theme(目标或问题)
- Solution(解决方法)
特定条件下人们解决某类重复问题的成功解决方案
分类:创建型结构型和行为型模式\类模式和对象模式
- 创建型模式:用于创建对象(工厂方法、抽象工厂、建造者、原型、单例)
- 结构型模式:用于处理类或对象间的组合(适配器、桥接、组合、装饰、外观、享元、代理)
- 行为型模式:用于描述类或对象间如何交互和分配职责(职责链、命令、解释器、迭代器、中介者、备忘录、观察者、状态、策略、模版、访问者)
面向对象设计原则:
目的:提升软件系统的可重用性和可维护性
- 可维护性:软件能够被理解、改正、适应及扩展的难易程度
- 可重用性:软件及模块能够被重复使用的难易程度
七条原则:
- 单一职责:一个对象应该只包含单一的职责,并且该职责被完整封装在一个类中
- 开闭原则:软件实体应当对扩展开放,对修改封闭
- 里氏代换:所有引用基类的地方必须能透明地引用他的子类
- 依赖倒转:高层模块不应依赖底层模块,他们都应该依赖抽象,抽象不应该依赖于细节,细节应该依赖于抽象
依赖倒转原则要求针对接口编程,不要针对实现编程。
对于依赖关系使用依赖注入联系到其他对象。
依赖注入:对某种依赖关系,A依赖于B,现不直接在A中实例化B的对象,而是将A声明为B的成员变量,在其他时候实例化B对象赋值给A中成员变量,此为依赖注入的一个实例 - 接口隔离:客户端不应依赖不需要的接口。
- 合成复用:优先使用对象组合,而不是通过继承达到复用目的。
原因:1. 继承可能破坏封装。2. 继承的基类实现是静态的,运行时不能改变。3.继承使用的环境比较小。
多令类间拥有Has-A的关系,而少有Is-A的关系 - 迪米特法则:每个单位都对其他单位只拥有最少的知识,而且只局限于与他有关的单位。
创建型模式:
1. 简单工厂模式:
定义一个工厂,可以根据输入参数不同返回不同结果,结果具有相同父类