alexpdh's blog

Java设计模式(三):设计模式六大原则

设计模式有六大原则

  • 单一职责原则(Single Responsibility Principle,SRP)
  • 开闭原则(Open-Closed Principle,OCP)
  • 里氏替换原则(Liskov Substitution Principle,LSP)
  • 依赖倒置原则(Dependency Inversion Principle,DIP)
  • 接口隔离原则(Interface Segregation Principle,ISP)
  • 迪米特法则(Law of Demeter,LoD)

单一职责原则

单一职责原则(Single Responsibility Principle,SRP):就一个类而言,应该仅有一个引起它变化的原因。即一个类应该只负责一个功能领域中的相应职责。

单一职责原则是实现高内聚、低耦合的指导方针,它是最简单但又最难运用的原则,需要设计人员发现类的不同职责并将其分离,而发现类的多重职责需要设计人员具有较强的分析设计能力和相关实践经验。

开闭原则

开闭原则(Open-Closed Principle,OCP): 是指软件实体(类、模块、函数等等)应该可以扩展,但是不可修改。即软件实体应该尽量在不修改原有代码的情况下进行扩展。

为了满足开闭原则,需要对系统进行抽象化设计,抽象化是开闭原则的关键。

里氏替换原则

里氏替换原则(Liskov Substitution Principle,LSP):所有引用父类的地方必须能够透明的使用子类的对象。即子类型必须能够替换掉它们的父类型。

里氏替换原则告诉我们,在软件中将一个基类对象替换成它的子类对象,程序将不会产生任何错误和异常,反过来则不成立,如果一个软件实体使用的是一个子类对象的话,那么它不一定能够使用基类对象。因此在程序中尽量使用基类类型来对对象进行定义,而在运行时再确定其子类类型,用子类对象来替换父类对象。同时,里氏代换原则是实现开闭原则的重要方式之一。

依赖倒置原则

依赖倒置原则(Dependency Inversion Principle,DIP):抽象不应该依赖细节,细节应该依赖于抽象。即应该针对接口编程,而不是针对实现编程。

在大多数情况下,我们会同时使用开闭原则、里氏代换原则和依赖倒转原则,开闭原则是目标,里氏代换原则是基础,依赖倒转原则是手段。

接口隔离原则

接口隔离原则(Interface Segregation Principle,ISP):使用专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口。

根据接口隔离原则,当一个接口太大时,我们需要将它分割成一些更细小的接口,使用该接口的客户端仅需知道与之相关的方法即可。每一个接口应该承担一种相对独立的角色,不干不该干的事,该干的事都要干。

迪米特法则

迪米特法则(Law of Demeter,LoD):一个软件实体应当尽可能少地与其它实体发生相互作用。

迪米特法则又称为最少知识原则(LeastKnowledge Principle,LIP)。
如果一个系统符合迪米特法则,那么当其中某一个模块发生修改时,就会尽量少地影响其他模块,扩展会相对容易,这是对软件实体之间通信的限制,迪米特法则要求限制软件实体之间通信的宽度和深度。迪米特法则可降低系统的耦合度,使类与类之间保持松散的耦合关系。

参考资料

http://www.cnblogs.com/dolphin0520/p/3919839.html

alexpdh wechat
欢迎扫一扫关注 程序猿pdh 公众号!