胡桃仁

虚度光阴27 载

💪💪韩顺平讲设计模式原则-4~7

4、里氏替换原则

(主要讲的是继承需要注意什么问题,要遵守什么规则

  • 在使用继承的时候,子类中尽量不要重写父类的方法。

  • 里氏替换原则告诉我们,继承实际上让两个类耦合性增强了,在适当的情况下,可以通过聚合组合(一个类的构造函数的参数类型是另一个类)依赖来解决问题。
    (让本来继承中的基类、子类共同继承一个更加基础的类,使其耦合性降低)

    聚合:聚合意味着一个对象拥有另一个对象或对另一个对象负责。一般我们认为一个对象包含另一个对象或者是另一个对象的一部分。聚合意味着聚合对象和其所有者有相同的生命周期。

出现问题的情况

通常情况下,重写父类的方法完成新的功能,写起来简单,但是整个继承体系的复用性会比较差。特别是运行多态比较频繁的时候。

解决

通常的做法是:原来的父类和子类都继承一个更通俗的基类,原有的继承关系去掉,采用聚合、依赖、组合等关系替代。

5、开闭原则

(open closed principle)
一个软件实体如类,模块和函数应该对扩展开放(对提供方),对修改关闭(对使用方)。用抽象构建框架,用实现扩展细节。

需求变化时,尽量通过扩展软件的行为来实现变化,而不是通过修改已有的代码来实现变化

6、迪米特法则

(Demeter Principle)

介绍

  • 1、(略)一个对象应该对其他对象保持最少的了解。
  • 2、类和类关系越密切,耦合度越大。
  • 3、又叫最少知道原则,即一个类对自己以来的类知道的越少越好。也就是说,对于被依赖的类不管多么复杂,都尽量将逻辑封装在类的内部。对外除提供的public 方法,不对外泄露任何信息。
  • 4、迪米特法则还有个更简单的定义:只与直接的朋友通信
  • 5、直接的朋友:只要两个对象之间有耦合关系,我们就说两个对象之间是朋友关系。耦合的方式包括:依赖,关联,组合,聚合等。 其中,一个对象是另一个对象的成员变量方法的一个参数方法的一个返回值这些情况,两个类是直接朋友。而一个对象是另外一个类的方法中的局部变量的时候,两个类不是直接朋友。notice🔺🔺:陌生的类最好不要以局部变量的形式出现在类的内部。

7、合成复用原则

(composite reuse principle)
尽量使用合成/聚合的方式,而不是i使用继承。


changelog

0️⃣1️⃣:更改聚合的描述

评论