设计模式七大原则

一个好的软件系统,应该拥有以下三个特性

  1、可拓展性:在软件开发的过程中,新的功能可以很容易的加入到老的系统中

  2、灵活性:系统代码的修改,不会影响到无关的其他模块

  3、可插拔性:对于已有的功能代码,可以很轻易的替换为其他实现

符合这三个特性的系统,拥有着较好的可维护性与可复用性,而七大设计原则则是为实现这一目标而遵守的原则

七大原则分别是:开闭原则(OCP),单一职责原则(SRP),里氏替换原则(LSP),依赖倒置原则(DIP),接口隔离原则(ISP),迪米特法则(LOD),合成复用原则(CRP)

  OCP作为七大原则的总纲,意指一个软件系统应该对拓展开放,对修改关闭,即可以在不修改原有代码的前提下,为系统拓展新的功能.在软件开发的过程中,总是需要新增新的功能,如果一个系统的设计符合OCP,其本身便已经具备了相当的可维护性以及可复用性,因为其上层的抽象接口可以不再改变,从而提高了稳定性,而通过拓展当前的系统,可以添加新的功能,本身也具有着相当的灵活性.

  剩余的六个原则,作为实现OCP的具体法则,其中SRP告诉我们实现类要职责单一,LSP告诉我们不要破坏类的继承体系,DIP告诉我们要针对接口编程,ISP告诉我们接口的设计要尽量精简,LOD告诉我们要降低耦合,CRP告诉我们要尽量用关联代替继承

  SRP:SRP规定每个类只能拥有一个职责,比如实现一个UserDao,则其只能操作USer对象的增删改查,如果它也提供了对其他对象的操作功能,则应该将功能分开,我们在做改动是,则只需要到对应的类中去修改

  LSP:LSP表示如果在代码的某处使用基类,那么这个地方一定适用与其子类,并且应用程序无法察觉出基类与子类的区别. 在JAVA语言中,编译期间,便会执行检测代码是否符合LSP,这也是Java规定子类方法的访问权限只能大于基类方法的原因.同时使用Java继承的最佳方式应该是,只继承抽象类,实现抽象类的方法,而从不由具体类继承

  DIP: DIP表示我们应该针对接口编程,而不是针对实现编程.这样才可以轻松的替换掉某个具体的实现,DIP是实现OCP的一条有效途径

  ISP:ISP要求我们对接口的设计尽量精简,如果一个类与依赖某个具体的接口,那么其依赖性应该建立在最小接口上,即接口应该只提供类所需要的抽象.

  LOD:LOD表明,如果两个类之间不必彼此直接通信,那么两个类就不应该发生直接的相互作用,以此来降低类与类之间的耦合.考虑上面说的ISP,ISP尽量降低类对接口的引用,以降低类与接口的耦合程度,本身就是符合迪米特法则的.而设计模式中的调停者模式以及门面模式均是LOD的体现.在Java代码的设计中,LOD要求我们尽量降低类以及方法的访问权限,如果可能,尽量将类设计为final类型,同时应建立低耦合的类,在类对外的引用上,应该将引用降至最低

  CRP:表示应该用合成/聚合代替继承.继承会将父类的实现细节暴露给子类,同时继承会破坏类的包装,父类发生变化时,会强迫子类发生变化,使得子类不得不修改以适应父类的变化,因为应该尽量使用合成/聚合来代替继承

原文地址:https://www.cnblogs.com/yytxdy/p/12205979.html