Java 面向对象六大原则总结

来源:互联网 发布:中国厕所文化知乎 编辑:程序博客网 时间:2024/04/19 18:52

(1)单一职责原则

定义:应该有且仅有一个原因引起类的变更。

注意:单一职责原则要求一个接口或类只有一个原因引起变化,也就是一个接口或类只有一个职责,它就负责一件事件。
一个类实现了两个接口,把两个职责融合在一个类中。(组合模式)。
接口一定要做到单一职责,类的设计尽量做到只有一个原因引起变化。

(2)里氏替换原则

定义:所有引用基类的地方必须能透明地使用其子类的对象。
只要父类能出现的地方子类就可以出现,而且替换为子类也不会产生任何错误或者异常。

注意:在类中调用其他类时务必要使用父类或接口。
子类中方法的前置条件必须与超类中被覆写的方法的前置条件相同或者更宽松。
1子类必须完全实现父类的方法。
2子类可以有自己的个性。
3覆写或实现父类的方法时输入参数可以被放大。
4覆写或实现父类的方法时输出结果可以被缩小。

(3)依赖倒置原则

定义:1高层模块不应该依赖底层模块,两者都应该依赖其抽象。
2抽象不应该依赖细节。
3细节应该依赖抽象。

实现:1模块间的依赖通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系是通过接口或抽象类产生的。
2接口或抽象类不依赖于实现类。
3实现类依赖接口或抽象类。

注意:在Java语言中,抽象就是指接口或抽象类,两者都是不能直接被实例化的;细节就是实现类,实现接口或继承抽象类而产生的类就是细节,其特点就是可以直接被实例化,也就是可以加上一个关键字new产生一个对象。

依赖的三种写法:
1构造函数传递依赖对象:在类中通过构造函数声明依赖对象,构造函数注入。
2Setter方法传递依赖对象:在抽象中设置Setter方法声明依赖关系,Setter依赖注入。
3接口声明依赖对象:在接口的方法中声明依赖对象,接口注入。

(4)接口隔离原则

定义:客户端不应该依赖它不需要的接口。类间的依赖关系应该建立在最小的接口上。

注意:接口尽量细化,同时接口中的方法尽量少。
根据接口隔离原则拆分接口时,首先必须满足单一职责原则。接口要高内聚。接口设计是有限度的。一个接口只服务于一个子模块或业务逻辑。

(5)迪米特原则

定义:最少知识原则。一个对象应该对其他对象有最少的了解。一个类应该对自己需要耦合或调用的类知道得最少。

注意:一个类只和朋友类交流,不与陌生类交流。类与类之间的关系是建立在类间的,而不是方法间,因此一个方法尽量不引入一个类中不存在的对象(JDK API提供的类除外)。
迪米特法则要求一个类尽量不要对外公布太多的public方法和非静态的public变量,尽量内敛,多使用private,package-private,protected等访问权限。
迪米特法则的核心观念就是类间解耦,弱耦合,高内聚低耦合。

(6)开闭原则

定义:一个软件实体如类,模块和函数应该对扩展开放,对修改关闭。一个软件实体应该通过扩展来实现变化,而不是通过修改已有的代码来实现变化。拥抱变化。

注意:开闭原则为软件实体的未来事件而制定的对现行开发设计进行约束的一个原则。底层模块的变更,必然要有高层模块进行耦合。开闭原则是抽象类,其他五大原则是具体的实现类。

使用:
1抽象约束:通过接口或抽象类可以约束一组可能变化的行为,并且能够实现对扩展开放。包含三层含义:第一,通过接口或抽象类约束扩展,对扩展进行边界限定,不允许出现在接口或抽象类不存在的public方法,第二,参数类型,引用对象尽量使用接口或者抽象类,而不是实现类,第三,抽象层尽量保持稳定,一旦确定即不允许修改。
2元数据控制模块行为:尽量使用元数据来控制程序的行为,减少重复开发。元数据是用来描述环境和数据的数据,通俗地说就是配置参数。
3制定项目章程:项目内约束。
4封装变化:第一,将相同的变化封装到一个接口或抽象类中。第二,将不同的变化封装到不同的接口或抽象类中,不应该有两个不同的变化出现在同一个接口或抽象类中。

Ps: 面向接口编程:对外公布的是接口而不是实现类。

0 0