开闭原则
开闭原则是模式的最基本原则,一句话概括:对扩展开放,对修改关闭。
在需求变更时,系统应该是通过扩展现有系统而不是修改原有逻辑,这是衡量一个架构优劣的最基本的条件。本原则是要求系统灵活性的体现。
里氏代换原则
里氏代换原则是其他一些原则的基础,一句话概括:子能代父,父不能代子。
这貌似是java语法规范,具体不讲。
依赖倒装原则
依赖倒装原则一句话概括:要依赖于抽象,而不依赖于具体。换言之:要针对接口编程,而不针对实现编程。
具体的实现就是尽量使用接口或者抽象类进行变量的声明,参量声明和返回值类型声明等。
List list = new ArrayList();
List是list的静态类型,而ArrayList是他的实际类型,如果以后需要用其他的方式是先List,就不用修改定义了,值需要修改实际类型。着也是系统灵活性的体现。
接口隔离原则
接口隔离就是尽量将接口抽象的独立,不要太多臃肿,不要让不必要的实现出现在不需要的实例中。
合成/聚合复用原则
如果需要复用模块,一般有两种方法,一种是使用继承,一种是使用合成/聚合。根据模式的要求,应该尽量使用合成/聚合的方式,避免直接使用继承复用。
这样做的目地是如果要使用继承,子类知道了所有父类的方法,安全性不高。继承也利于重构,过多的继承使结构过分的复杂,难以维护。
迪米特法则
一句话概括:不必彼此通信的两个类,就不应该发生直接作用,如果非要通信,可以通过第三者传递。本法则的根本思想是高内聚,低聚合,解耦不必要的关联关系。
缺点:1 会产生很多不必要的无业务意义的转发类。 2 降低了通信效率,模块间不易协调。
弥补:使用依赖倒转原则进行互补使用可以克服。
类图中类之间的几种关系:
一般关系
一般关系就是继承和实现关系,也就是父子关系。
UML中使用实线加三角表示继承,虚线加三角表示实现。
关联关系
关联关系表示一个类知道另一个类的所有情况,一般是一个类中包含另一个类的实例变量。
在UML中使用实现加箭头表示,二者关系可以是一对一,一对多的。
聚合关系
聚合关系是比较强的关联关系,不仅仅是一个类包含另一个类的实例,而且这二者是整体和个体之间的关系。在java的实现中聚合关系和关联关系在代码级上没有区别,只是在业务意义上二者的意义不一样。
在UML中使用实现和菱形表示,二者关系同关联关系。
合成关系
合成关系是比聚合关系更强的关联关系,要求两者之间是整体和部分的关系,并且整体对象负责部分对象的存活。部分对象不可共享。在java实现中,合成和聚合关系也是没有区别的,只有业务意义上的不同。
在UML中使用实线加实心菱形表示,二者关系同关联。
依赖关系
依赖关系表示一个类依赖于另一个类的定义,不同于关联关系的实例变量,而是通过方法传递引用,具体可以通过局部变量,方法参量以及静态方法调用的方式实现。有地方也称为使用关系。
在UML中用虚线加箭头来表示。
最后补充点抽象类和接口的关系:
1 抽象类可以提供缺省的实现
2 接口可以多继承
3 接口更利于重构
4 接口可以定义混合类型,如cloneable等。
最佳实现,使用抽象类实现接口,提供缺省的实现,根据自身逻辑重写部分方法。
记录以备查阅。