Java开发设计六大基本原则

一、单一职责

1、定义
  • 不要存在多于一个导致类变更的原因
2、理解
  • 一个类只负责一个职责
3、举例
  • 手机:对于手机来说,其根本职责其实就是打电话,即有电话进来时会发出声响。但是,目前的智能手机综合了各种功能,短信、微信、甚至闹钟都会导致手机发生提示声响

二、开闭原则

1、定义
* Software entities like classes,modules and functions should be open for extension but closed formodifications.
	解释:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。

2、理解
  • 对扩展开发,对修改关闭
    • 当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化。
3、如何使用
* 抽象约束
    1.通过接口或抽象类约束扩展,对扩展进行边界限定,不允许出现在接口或抽象类中不存在的public方法;
    2.参数类型、引用对象尽量使用接口或者抽象类,而不是实现类;
    3.抽象层尽量保持稳定,一旦确定即不允许修改。
    
* 元数据(metadata)控制模块行为
	何谓元数据?就是用来描述环境和数据的数据,通俗地说就是配置参数,参数可以从文件中获得,也可以从数据库中获得。
	
* 制定项目章程(团队约定)

* 封装变化
	1.将相同的变化封装到一个接口或抽象类中;
	2.将不同的变化封装到不同的接口或抽象类中,不应该有两个不同的变化出现在同一个接口或抽象类中。
	3.封装变化,也就是受保护的变化(protected variations),找出预计有变化或不稳定的点,我们为这些变化点创建稳定的接口,准确地讲是封装可能发生的变化,一旦预测到或“第六感”发觉有变化,就可以进行封装,23个设计模式都是从各个不同的角度对变化进行封装的

三、里氏替换

1、定义
* If for each object o1 of type S there is an object o2 oftype T such that for all programs P defined in terms of T,the behavior of P is unchanged when o1 issubstituted for o2 then S is a subtype of T.
	解释:如果对每一个类型为S的对象o1,都有类型为T的对象o2,使得以T定义的所有程序P在所有的对象o1都代换成o2时,程序P的行为没有发生变化,那么类型S是类型T的子类型。
2、理解
  • 只要父类能出现的地方子类就可以出现,而且替换为子类也不会产生任何错误或异常
3、好处
* 代码共享,减少创建类的工作量,每个子类都拥有父类的方法和属性;
* 提高代码的重用性;
* 子类可以形似父类,但又异于父类;
* 提高代码的可扩展性,实现父类的方法就可以“为所欲为”了;
* 提高产品或项目的开放性。

四、依赖倒置

1、定义
* High level modules should not depend upon low level modules.Both should depend uponabstractions.Abstractions should not depend upon details.Details should depend upon abstractions.

1. 高层模块不应该依赖低层模块,两者都应该依赖其抽象;
2. 抽象不应该依赖细节;
3. 细节应该依赖抽象。

2、Java中的体现
  • 模块间的依赖通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系是通过接口或抽象类产生的;
  • 接口或抽象类不依赖于实现类;
  • 实现类依赖接口或抽象类。
3、最佳写法
  • 构造函数传递依赖对象(构造函数注入),在类中通过构造函数声明依赖对象
  • Setter方法传递依赖对象(Setter依赖注入),在抽象中设置Setter方法声明依赖关系
  • 在接口的方法中声明依赖对象(接口注入)

五、接口隔离

1、定义
* Clients should not be forced to depend upon interfaces that they don't use.
	解释:客户端需要什么接口就提供什么接口,把不需要的接口剔除掉,那就需要对接口进行细化,保证其纯洁性;
2、理解
  • 接口中不存在对子类中无用的且必须实现的方法,如果有,需要对接口进行拆分
3、概括
  • 建立单一接口,不要建立臃肿庞大的接口。再通俗一点讲:接口尽量细化,同时接口中的方法尽量少

六、迪米特法则

1、定义
  • 一个对象应该对其他对象有最少的了解
2、理解
  • 降低类与类之间的耦合度
3、概括
  • 通俗地讲,一个类应该对自己需要耦合或调用的类知道得最少,你(被耦合或调用的类)的内部是如何复杂都和我没关系,那是你的事情,我就知道你提供的这么多public方法,我就调用这么多,其他的我一概不关心。
原文地址:https://www.cnblogs.com/pretttyboy/p/13455593.html