二.设计模式原则

一.开闭原则

  含义:当应用的需求改变时,在不修改软件实体的源代码或者二进制代码的前提下,可以扩展模块功能,使其满足新的需求。

  作用:1.对软件测试的影响小,只需要对扩展的代码进行测试就可以。2可以提到代码的课复用性。3.可以提高软件的可维护性。

  实现方法:可以通过“抽象约束、封装变化”来实现开闭原则,即通过接口或者抽象类为软件实体定义一个相对稳定的抽象层,而将不同的可变因素封装在相同的具体实现类中。

二.里氏替换原则

  含义及实现:子类可以扩展父类的功能,但不能改变父类原有的功能,也就是说子类继承父类时,除添加新的方法完成新增功能外,尽量不要重写父类的方法。

  作用:1.里氏体院原则是实现开闭原则的重要方式之一。2.它客服了继承中重写父类造成的可复用性变差的缺点。3.它是动作正确性的保证,即类的扩展不会给已有的系统引入新的错误,降低了大妈出错的可能性。

  举例:企鹅、鸵鸟和几维鸟从生物学的角度来划分,它们属于鸟类;但从类的继承关系来看,由于它们不能继承“鸟”会飞的功能,所以它们不能定义成“鸟”的子类。

三.依赖倒置原则

  含义:高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象。依赖倒置原则是实现开闭原则的重要途径之一,它降低了客户与显现模块之间的耦合。

  作用:1.降低类间的耦合性。2.提高系统的稳定性。3.减少并行开发引起的风险。4.提高代码的可读性和可维护性。

  实现:1.每个类尽量提供接口或抽象类,或者两者都具备。2.变量的声明类型尽量是接口或者是抽象类。3.任何类都不应该从具体类派生。4.使用继承时尽量组训里氏替换原则。

四.单一职责原则

  含义:一个类应该有且仅有一个引起它变化的原因,负责类应该被拆分。如果一个对象承担了太多的职责,至少存在以下两个缺点:1.之歌职责的变化可能会削弱或抑制这个类实现其他职责的能力;2.当客户端需要改对象的某一个职责时,不得不将其他不需要的职责全都包含进来,从而造成冗余代码或代码的浪费。

  作用:1.降低类的复杂度。2.提高类的可读性。3.提高形同的可维护性。4.变更引起的风险降低。

  实现:发现类的不同职责并将其分离,再封装到不同的类或者模块中。

五.接口隔离原则

  定义:客户端不应该被迫依赖于它不适用的方法,一个类对另一个类的依赖应该建立在最小的接口上。即要为各个类建立他们需要的专用接口,而不要试图去建立一个很庞大的接口供所有依赖他的类去调用。

六.迪米特法则

  定义:只与你的直接朋友交谈,不跟“陌生人”说话,如果两个软件实体无需直接通信,那就不应当发生直接的相互调用,可以通过第三方转发调用。其目的是降低类之间的耦合度,提高模块的相对独立性。

  迪米特法则中的朋友是指当前对象本身、当前对象的成员变量、当前对象所创建的对象、当前对象的方法参数等,这些对象同当前对象存在关联、聚合或者组合关系,可以直接访问这些对象。但是,过度使用迪米特法则会使系统产生大量的中介类,从而增加系统的复杂性,使模块间通信效率降低,使用时需要反复权衡。

  实现:1.从依赖着的角度来说,只依赖应该依赖的对象;2.从被依赖者的角度说,只暴露应该暴露的方法。

七.合成复用原则

  定义:组合/聚合复用原则,它要求在软件复用时,要尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现。

  如果要使用继承关系,则必须严格遵循里氏替换原则,合成复用原则同里氏替换原则相辅相成的,两者都是开闭原则的具体实现规范。

  实现:通过将已有的对象纳入新对象中,作为新对象的成员对象来实现,新对象可以调用已有对象的功能,从而达到复用。

posted @ 2020-08-11 14:04  Mr陈二  阅读(74)  评论(0编辑  收藏  举报