设计模式的七大原则

    科技2022-07-10  190

    设计模式最主要的目的就是解耦,低耦合,高内聚,扩展性,重用性,灵活性,这些都是设计模式努力的方向。

    重用性:相同功能的代码,可以复用可读性:代码结构清晰简洁,编程规范,便于其他程序员阅读与理解可扩展性:当需要增加新的功能的时候,非常方便可靠性:增加新功能后,对原来功能没有影响

    当然不是随随便便的模式都可以成为设计模式,设计模式也要遵守一定的设计原则。

    单一职责模式 顾名思义,一个类应该只负责一项职责 作用:降低类复杂度,一个类只负责一项职责,提高类的可读性和维护性

    接口隔离原则 客户端不应该依赖于它不需要的接口,一个类对另一类的依赖应该建立在最小的接口上,这样讲可能还是有点抽象,看下下面的伪代码理解下:

    Interface A{ Method a; Method b; Method c; } //假设现在有个实现类B,B只需要Method A和Method B方法,那么如果B实现了A, //那么B就需要多实现一个Method c方法,而对于这个方法C,B并不需要。所以对于B来说, //A并不是最小接口 class B implements A{ //实现方法a //实现方法b //实现方法c }

    解决上述的问题就是把接口A,拆分为更小的接口

    依赖倒转原则 1、高层模块不依赖于底层模块,二者应依赖于其抽象 2、抽象不应该依赖细节,细节应该依赖于抽象 3、其核心思想就是面向接口编程 4、对比细节实现的多变性,使用抽象比较稳定 5、使用接口和抽象就相当于制定好规范,然后让实现类根据规范去填充细节部分。

    class QQ{ } class QQ implements Tool{ } class WeiChat implements Tool{ } class People{ public void get(QQ q){//这样写就相当于写死了, //后续如果要增加微信其他的,就需要直接修改这部分代码,所以不可取 } public void get(Tool t){//应采取这种方法 } }

    里氏替换原则 此原则通俗来讲就是不要去重写父类中已经实现的方法,一但修改容易对整个继承体系造成破坏,举个例子:

    class A{ public void a(){ System.out.println("a"); } } class B extends A{ public void a(){//重写了父类中的a方法 System.out.println("b"); } } class C extends B{ public void b(){ a();//调用了a方法,C想要调用的是A中的a方法, //可是却不知道B对a方法进行了重写,所以这里就出现了问题 } }

    建议:通过聚合,组合,依赖等来解决问题

    开闭原则(OCP) 这个原则是最基础,也是最重要的原则。从字面上了解到意思就是对扩展开放,对修改关闭。 利用抽象来构建框架,使用实现来扩展细节。 当一个软件需要扩展功能的时候,我们不应该去修改原来已经有的功能代码。

    迪米特原则 一个对象应该对其他的对象保持最少的了解,类与类直接关系或者了解越密切,其耦合性就越高。 这个原则又称最少知道原则,一个类应该对自己所依赖的类知道得越少越好。 迪米特原则,一个最简单的理解就是要与直接的朋友进行通信,何为直接朋友呢? 直接朋友:出现在成员变量、方法参数、方法返回值的类就是直接朋友,而在局部变量中出现的类就不是直接朋友,也就是说陌生类不要以局部变量的形式出现在类的内部。

    合成复用原则 写代码的时候应尽量使用合成聚合的方式,而不是继承的方式,继承其实就是加大了类与类之间的耦合性

    总结一下: 设计原则的核心: 1、将稳定的代码和变化的代码分离出来 2、面向接口编程 3、低耦合,高内聚

    Processed: 0.063, SQL: 8