设计模式的设计原则

单一职责原则

是什么

单一职责原则的英文名称是Single Responsibility Principle,简称SRP。
“一个类仅有一个职责”或者“引起类变化的只有一个原因”,这就是单一职责原理。
类只因一个原因而变化,这仿佛是一种新的类定义方式。当接触面向对象编程时,试图把一个类对比为一个事物,事物具备的功能都是这个类的操作。比如,一根尺子,既可以用来打学生手板,也可以用来丈量布匹。而在单一职责原理下,尺子的两个功能就是引起这个类变化的两个原因,就应该写成两个类。
简单来说,一个类中应该是一组相关性很高的函数、数据的封装。单一职责的划分界限并不是总是那么清晰,很多时候都是需要靠个人经验来界定。当然,最大的问题就是对职责的定义,什么是类的职责,以及怎么划分类的职责。

优点

  • 降低类的复杂性

  • 提高类的可读性

  • 提高代码的可维护性和复用性

  • 降低因变更引起的风险

应用

Java EE中的分层框架模式实际上体现了单一职责原则,它将整个系统按照职责的内聚性划分为不同的层,层内的模块与类具有宏观的内聚性,所关注的事情是一致的。例如,业务逻辑层主要关注系统的的业务逻辑与业务流,而数据访问层只负责数据的持久化访问。

里氏替换原则

是什么

英文全称是Liskov Substitution Principle,简称LSP。
详解里氏替换原则

应用

要求凡是使用基类的地方,子类一定适用,因此子类必须具备基类的全部接口。或者说,子类型的接口必须包括全部的基类的接口,而且还有可能更宽。
按照里氏替换原则,当多个类之间存在继承关系时,通常应该使用父类或接口来指向子类的对象(除非需要使用子类特有的方法),这更利于提高系统的可扩展性。
设计模式中体现里氏替换原则的:

  • 策略模式

  • 组合模式

  • 代理模式

    如何符合LSP?总结一句话 —— 就是尽量不要从可实例化的父类中继承,而是要使用基于抽象类和接口的继承。

    依赖倒置原则

是什么

依赖倒转原则(Dependency Inversion Principle, DIP):高层模块不应该依赖具体底层模块,两个都应该依赖接口。简单的说就是面向接口编程,而不是面向具体实现。 抽象不应该依赖于细节,细节应当依赖于抽象。换言之,要针对抽象(接口)编程,而不是针对实现细节编程。

在实际编程中,我们一般需要做到如下3点:

1.低层模块尽量都要有抽象类或接口,或者两者都有。
2.变量的声明类型尽量是抽象类或接口。
3.使用继承时遵循里氏替换原则。

依赖倒置有三种方式来实现

1.通过构造函数传递依赖对象;
比如在构造函数中的需要传递的参数是抽象类或接口的方式实现。
2.通过setter方法传递依赖对象;
即在我们设置的setXXX方法中的参数为抽象类或接口,来实现传递依赖对象。
3.接口声明实现依赖对象,也叫接口注入;
即在函数声明中参数为抽象类或接口,来实现传递依赖对象,从而达到直接使用依赖对象的目的。
依赖倒置原则的本质就是通过抽象使各个类或模块的实现彼此独立,互不影响,实现模块间的松耦合。依赖倒置原则的核心就是要我们面向接口编程,理解了面向接口编程,也就理解了依赖倒置。

接口隔离原则

是什么

只提供调用者需要的方法,屏蔽不需要的方法。客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上;使用多个专用接口比使用单一的总接口要好。

迪米特原则

是什么

迪米特原则(Law of Demeter,LoD),也叫最少知识原则(Low knowledge Principle,LKP):
一个对象应该对其他对象有最少的了解。
通俗的讲:一个类对自己需要耦合或调用的类知道的最少,你(被耦合或调用的类)的内部是如何复杂和我没有关系,我就知道你提供的public方法,我只调用这些方法,其它的我不关心。
如果两个类不必彼此直接通信,那么这两个类就不应该发生直接的相互作用;如果一个类需要调用另一个类的某个方法,可以通过第三者转发调用。

开闭原则

是什么

开闭原则是java世界里最基础的设计原则,它指导我们如何建立一个稳定,灵活的系统。开闭原则定义如下:

Software entities like classes,modules and functions should be open for extension but closed for modifications.

一个软件实体如类,模块和函数应该对扩展开放,对修改关闭。

猜你喜欢

转载自blog.csdn.net/mdreamlove/article/details/80502896
今日推荐