Java学习笔记----设计模式之六大原则解读

本篇主要内容:设计模式的六大原则介绍


一:开闭原则


开闭原则的定义: Software entities should be open for extension,but closed for modification.

                            一个软件实体如类、模块、方法应该对扩展开放,对修改关闭。

一个软件产品,从开发出来到它的生命周期结束都会不可避免地发生变化,我们在软件设计时就应该考虑到它的这些变化,以提高项目的稳定性与灵活性。开闭原则告诉我们尽量通过扩展软件实体的方式来实现变化,而不是通过修改已有的代码实现变化,这是对软件开发未来的事情对现在的开发设计进行的一个约束。


二:单一职责原则


单一职责原则定义:There should never be more than one reason for a class to change.

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

通俗来讲就是一个接口或类只有一个原因引起变化,也就是一个接口或类只有一个职责,它只负责一件事情。

单一职责原则可以使类的复杂度降低,可读性提高,可维护性提高,变更引起的风险降低。


三:里氏替换原则


里氏替换原则定义:Functions that use pointers or references to base classes must be able to use objects of derived  classes without knowing it.

                                所有引用基类的地方必须能透明地使用其子类的对象。

通俗来讲就是只要父类能出现的地方子类就可以出现,并且替换为子类也不会产生任何错误或异常,使用者可能根本就不需要知道是子类还是父类。

里氏替换原则为子类继承父类提供了很好的规范:

        1、子类必须完全实现父类的方法

        2、子类可以有自己的方法和属性,所以里氏替换原则反过来并不成立

       3、覆盖或实现父类方法时输入参数可以被放大(子类的输入参数类型范围要比父类大,如父类为HashMap,子类可以为 Map)

        4、覆盖或实现父类方法时输出结果可以被缩小(父类返回值是一个类型T,则子类返回类型S,S可以是T也可以是T的子类)


四:依赖倒置原则


依赖倒置原则定义:High level modules should not depend upon low level modules.Both should depend upon abstractions.Abstractions should not depend upon details .details should depend upon abstractions.

依赖倒置原则主要包含三层含义:

        高层模块不应该依赖低层模块,两者都应该依赖抽象

        抽象不应该依赖细节

        细节应该依赖抽象

我们在项目中使用依赖倒置原则只要遵循:

        每个类尽量都有抽象类或接口,或者抽象类和接口都具备

        变量的表面类型尽量是接口或抽象类

        任何类都不应该从具体类派生

        尽量不要覆写基类的方法


五:接口隔离原则


接口隔离原则定义:Clients should not be forced to depend upon interfaces that they don't use.

                              客户端不应该依赖它不需要的接口

接口隔离原则是对接口进行规范约束:

        接口要尽量的小

        接口要高内聚(提高接口的处理能力,减少对外的交互)

        定制服务,对不同模块之间单独提供一个个优良的服务

        接口的设计是有限度的,设计粒度大小和系统复杂之间的平衡


六:迪米特法则(最少知道原则)


迪米特法则定义:Only talk to your immediate friends

                            一个对象应该对其他对象有最少的了解

尽量不要对外公布太多的public方法和非静态的public变量,尽量使用private、protected等访问权限。迪米特法则的核心观念就是类间解耦,弱耦合,只有弱耦合后,类的复用率才可以提高,但结果会产生大量的类,导致系统复杂性提高。所以在采用迪米特法则时,需要反复权衡,既做到结构清晰,又做到高内聚、低耦合。



参考资料:秦小波《设计模式之禅》







猜你喜欢

转载自blog.csdn.net/zhang_hongxin/article/details/80958245