Java面向对象常见的设计原则有哪些?
面向对象程序设计是当今主流的程序设计范型,已经取代了早期的“结构化”过程化程序设计开发技术,java是完全面向对象的计算机语言,要使用面向对象式来设计java程序。
学习Java肯定需要知道面向对象设计原则是什么,这样才能用写出程序。
面向对象设计原则一共有七个:开闭原则、里氏替换原则、依赖倒转原则、单一职责原则、接口隔离原则、组合/聚合复用原则、迪米特法则。
下面分别来介绍这七大面向对象设计原则:
1、开闭原则
面向对象可复用设计原则中最基础的原则便是开闭原则,开闭原则指的是在设计一个对象(类、模块、函数)时,应遵循或做到对扩展开放、对修改关闭,其核心思想是面向接口/抽象进行编程。
系统的抽象化设计,是开放关闭原则的关键。可以通过接口、抽象类定义系统的抽象层,通过实现类进行扩展,增加新功能只需增加新的实现类,而无需修改抽象层,从而实现在不修改已有代码的情况下实现系统扩展。
2、里氏替换原则
里氏替换原则要求设计一个对象时,代码中任何父类对象可以出现的地方,子类都可以出现,即可以使用子类来代替父类。实现开闭原则的核心思想是面向接口/抽象进行编程,其关键步骤是抽象化,而父类和子类的继承关系就是抽象化的具体体现,所以里氏替换原则是对实现抽象化的具体步骤的规范,它是对开闭原则的补充。
3、依赖倒转原则
依赖倒转原则指程序中要依赖抽象(接口/抽象类)而不是具体的实现(实现类)进行编程,即面向接口/抽象进行编程,这样可以最大程度降低模块之间的耦合。比如订单服务中,会调用(依赖)支付服务以完成订单的支付。
此时的订单服务实现类代码中,声明或持有的应该是一个支付服务PayService接口,而不是具体实现类比如Alipay或WeChatPay,所有需要用到支付服务的地方,调用的都是PayService接口变量,即代码中都是接口,等到在运行时才实例化或注入具体的实现类,编写代码时不需要关心具体实现类,也就是面向接口/抽象编程。
这样,在应用程序扩展或集成新的支付服务时,原来的订单服务代码可以不需要进行修改任何代码,这样也就符合了开闭原则。
4、单一职责原则
一个类只负责一个功能领域中的相应职责。就一个类而言,应该只有一个引起它变化的原因。不同的类具备不同的职责,各司其职。
优点:
(1)可以降低类的复杂度,一个类只负责一项职责,其逻辑肯定要比负责多项职责简单的多;
(2)类的可读性高,进而可以提高系统的可维护性;
(3)变更引起的风险降低,变更是必然的,如果单一职责原则遵守的好,当修改一个功能时,可以显著降低对其他功能的影响。
单一职责原则是最简单但又最难运用的原则,难点在于职责和粒度划分。一个类往往具有多重职责,而发现类的多重职、职责粒度拆分的大小需要要设计人员具有较强的分析设计能力和相关实践经验。
5、接口隔离原则
接口隔离原则指设计时不同的功能应定义在不同的接口上,避免实现类依赖不需要的接口,换个角度理解就是一个类应该依赖尽量少的接口或实现类,减少程序的冗余性和复杂性。
在使用接口隔离原则时,我们需要注意控制接口的粒度,接口不能太小,如果太小会导致系统中接口泛滥,不利于维护;接口也不能太大,太大的接口将违背接口隔离原则,灵活性较差,使用起来很不方便。
一般而言,接口中仅包含为某一类用户定制的方法即可,不应该强迫客户依赖于那些它们不用的方法。
6、组合/聚合复用原则
组合/聚合复用原则也叫做合成复用原则,它指在一个新的对象中引入/注入现有的对象以达到功能复用和扩展的目的。简单讲就是尽量使用组合/聚合而不要使用继承。
7、迪米特法则
迪米特法则指设计一个对象时,尽可能少的与其它对象发生相互作用,即尽可能少的了解或依赖其它对象,降低耦合度。广义的迪米特法则,在类设计的具体操作上,主要通过以下三点来体现:
(1)优先考虑将一个类设置为final不变类;
(2)尽量降低一个类及其成员变量的访问权限;
(3)谨慎使用序列化.
希望上面对面向对象设计原则的介绍可以帮助到大家,尤其是希望Java零基础的朋友们对面向对象更深入的理解。熟练掌握七大面向对象设计原则是初级java程序员向中高级程序员进阶的基础,应用好面向对象设计原则可以提升程序的可复用性和可维护性,也是重构代码的一大利器。
如果Java零基础的朋友需要学习视频的话,可以看一下Java300集,非常适合零基础,视频包含基础知识穿插项目,更容易理解