设计模式
是高度抽象化的,在编程中可以被反复使用的代码设计经验的总结。
是人们长期编程经验总结出的编程思想。
使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。
设计模式按照使用场景可以分为三大类:
创建型模式(Creational Patterns) :
创建对象的方法,对对象的实例化过程进行抽象,对于类创建模式来说通过使用继承改变实例化的类,对于对象创建模式来说通过使用代理来实例化所需要的对象。
对象实例化的模式,创建型模式用于解耦对象的实例化过程。
- 工厂模式 Factory Pattern
- 抽象工厂模式 Abstract Factory Pattern
- 原型模式 Prototype Pattern
- 构建者模式 Builder Pattern
- 单例模式 Singleton Pattern
结构型模式(Structural Patterns):
通过对多个类和对象进行组合得到复杂结构的类,一般使用继承或者成员变量引用形式来实现。
把类或对象结合在一起形成一个更大的结构。
- 适配器模式Adapter Pattern
- 桥接模式 Bridge Pattern
- 过滤器模式Filter Criteria Pattern
- 组合模式Composite Pattern
- 装饰者模式 Decorator Pattern
- 门面模式 外观模式 Facade Pattern
- 享元模式 Flyweight Pattern
- 代理模式 Proxy Pattern
行为型模式(Behavioral Patterns):
行为模式不仅表达了对象和类,还表达了他们之间的交互,涉及到了对象和算法的分配。
类和对象如何交互,及划分责任和算法
通过类之间不同的通信方式实现不同的行为方式
-
责任链模式 chain of responsibility pattern
-
命令模式 command pattern
-
解释器模式interpreter pattern
-
迭代器模式iterator pattern
-
中介者模式 mediator pattern
-
备忘录模式 memento(纪念品) pattern
-
观察者模式observer pattern
-
状态模式state pattern
-
策略模式strategy pattern
-
模板方法模式template pattern
-
访问者模式visitor pattern
设计原则
设计模式的7个原则。
为了便于记忆,我们可以使用一个口诀来记忆面向对象设计原则:开口合里最单依
开闭原则(Open-Closed Principle, OCP)
对象(类、模块、函数)对扩展开放,对修改关闭,实体应该在不改变其源代码的基础上改变其行为。这是面向对象设计(OOD)的基石。
接口隔离原则(Interface Segregation Principle, ISP)
通过将不同的功能定义在不同的接口中来实现接口隔离。避免了其他类在依赖该接口时依赖其他不需要的接口(功能),减少客户程序之间的耦合性,以及接口之间依赖的冗余性和复杂性。
组合/聚合复用原则(Composite/Aggregate Reuse Principle,CARP)
在一个新的对象中引入已有对象,达到类的功能扩展和复用。要尽量使用聚合or组合,而不是集成去扩展类功能。
里氏代换原则(Liskov Substitution Principle,LSP)
在任意父类出现的地方,子类都一定可以出现。
实现开闭原则的关键就是抽象化,子父类的继承关系是抽象化的具体实现, 里氏替换是实现抽象化的规范。
由 Barbar Liskov (芭芭拉.里氏) 提出,是继承复用的基石。
最少知识原则(Least Knowledge Principle,LKP)(迪米特法则)
一个对象应该对其他对象,尽可能的少的了解和依赖(相互作用),降低模块的耦合性,提高内聚性。模块之间功能独立,可以独立运行,也使组合变得更容易。
单一职责原则(Simple responsibility pinciple,SRP)
一个类只有一个职责,(仅有一个引起它变化的原因)、
依赖倒置原则(Dependence Inversion Principle)、
依赖于抽象(抽象类and接口),不依赖于具体的实现类。降低了用户和实现模块之间的耦合度。
(减少类间的耦合性,提高系统的稳定,降低并行开发引起的风险,提高代码的可读性和可维护性)