【七个设计原则】
1. 单一职责原则(SRP)
- 定义
一个类应该只包含单一的职责,并且该职责被完整的封装在这个类里面。
一个类应该仅有一个引起它变化的原因。 - 分析
1.如果一个类承担的责任过多,就等于把这些类的职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其它职责的能力。这种耦合会导致脆弱的设计,当变化发生时,设计会造成意想不到的破坏。
2.软件设计真正要做的许多内容,就是发现职责并把那些职责相互分离。
3.如果你能在想到一个理由去改变一个类,那么这个类就会多一个职责。
2.里氏代换原则(LSP)
- 定义
一个软件实体如果使用的是一个父类的话,那么一定适用于其子类,而且察觉不出父类和子类的区别,也就是在软件里面,把父类都替换成子类,程序的行为不会发生任何改变。 - 分析
1.只有当子类可以替换掉父类,软件单位的功能不受影响时,父类才能真正被复用,而子类也能够在父类的基础上增加新的行为。反过来则不然,一个软件实体使用的是一个子类,那么他不一定能够使用基类。
2.由于子类型的可替代性才使得使用父类类型的模块在无需更改的情况下就可以扩展。
3.接口隔离原则
- 定义
客户端不应该依赖那些它不需要的接口。
一旦一个接口太大,则需要将它分割成一些更小的接口,使用该接口的客户端仅需知道与之相关的方法即可。 - 分析
1.接口隔离原则就是使用多个专门的接口,而不是使用单一的总接口,每一个接口应该承担一种相对独立的角色,不多不少,不干不该干的事情,该干的事都要干。
2.使用接口隔离原则拆分接口时,首先必须满足单一职责原则,将一组相关的操作定义在一个接口中,且在满足高内聚的前提下,接口中的方法越少越好。
4.合成复用原则
- 定义
尽量使用对象组合,而不是继承来达到复用的目的。 - 分析
1.合成复用原则就是指在一个新的对象里通过关联关系(包括组合关系和聚合关系)来使用一些已有的对象,使之成为新对象的一部分;新对象通过委派调用已有的对象方法达到复用其已有功能的目的。简而言之:要尽量使用组合/聚合关系,少用继承 。
a)组合/内聚:耦合度相对较低,选择性地调用成员对象的操作;可以在运行时动态进行。
b)继承:实现简单,易于扩展。破坏系统的封装性;从基类继承而来的实现时静态的,不可能在运行时发生改变,没有足够的灵活性;只能在有限的情况下进行。
5.开放-封闭原则(OCP)
怎样设计才能面对需求的改变时却可以保持相对的稳定性,从而使得系统可以在第一个版本之后不断推出新的版本?------开放-封闭原则
- 定义
是说一个软件实体(类,模块,函数等等)应该可以扩展(开放),但是不可以修改(封闭)。
6.依赖倒转原则
- 定义
高层模块不应该依赖低层模块,两个都应该依赖抽象,抽象不应该依赖细节,细节应该依赖于抽象。
要针对接口编程,不要针对实现编程。 - 分析
依赖倒转可以说是面向对象设计的标志,用那种语言来编写程序是不重要的,如果编写程序时考虑的如何针对抽象编程而不是针对细节编程,即程序中所有的依赖关系都是终止于抽象类或者接口,那就是面向对象设计,反之那就是过程化设计。
7.迪米特法则
- 定义
如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。 - 特点
1.在类的结构设计上,每一个类都应当尽量降低成员的访问权限。
2.其实在根本上强调了,类之间的松耦合。
3.类之间的耦合越弱,越有利于复用,一个处在弱耦合的类被修改,不会对有关系的类造成波及。
【六个创建模式】
1.原型模型
- 定义
用原型实例指定创建对象种类,并且通过拷贝这些原型创建新的对象。
2.单例模式
- 定义
就是保证某个实例的唯一性,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法。 - 说明
1.为确保唯一,我们要确保不能在类的外界创建实例(不能使用New关键字),把构造方法私有化(Private)。
2.不能创建新的对象那么我们需要在类的内部创建一个私有的静态成员变量。
3.为了保证外界使用该成员变量,并实例化该对象,就是提供一个共有的静态方法(返回值类型就是该类)。在该方法中要先判断私有的内部成员变量是不是为空,为空的话就先赋值在返回。
【七个结构型模式】
1.外观模式
- 定义
为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 - 说明
1.设计初期阶段:应该要有意识的将不同的两个层分离,层与层之间建立外观Facade。
2.开发阶段:子系统往往因不断的重构演化而变得越来越复杂,增加一个外观Facade可以提供一个简单的接口,减少他们之间的依赖。
3.维护阶段:在维护一个遗留的大型系统时,可能这个系统已经非常难以维护和扩展了,为新的系统开发一个外观Facade类,来提供设计粗糙或高度复杂的遗留代码的比较清晰简单的接口,让新系统与Facade对象交互,Facade与遗留代码交互所有复杂的工作。
【十一个行为模式】
1.状态模式
- 定义