设计模式 六大原则

设计模式六大原则

分类

单一职责原则(Single Responsibility Principle)

定义

一个方法只负责一件事

一个方法、一个类只负责一个职责,各个职责的程序改动。不影响其他程序。

目的

降低类和类的耦合,提高可读性,增加可维护性和可扩展性,降低可变性的风险。


开闭原则 (Open Closed Principle)

定义

一个软件的实体应该对扩展开放,对修改关闭

也就是说设计一个模块的时候,应当使这个模块可以在不被修改的情况下被扩展,即实现在不修改源代码的情况下改变这个模块的行为。

目的

提高软件的可维护性、可扩展性和可重用性,同时降低软件的复杂性和风险。遵循开闭原则可以使软件更容易应对变化和需求的不断演化,同时也可以减少程序员的工作量和出错率。

实现的方式

  1. 抽象和多态
  2. 模版方法
  3. 策略模式
  4. 观察者模式

参考

设计模式六大原则(六)----开闭原则


里氏替换原则 (Liskov Substitution principle)

定义

使用的基类可以在任何地方使用继承的子类,完美的替换基类。

子类可以扩展父类的功能,但不能改变父类原有的功能。子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法,子类可以增加自己特有的方法。

作用

增加程序的健壮性,即使增加了子类,原有的子类还可以继续运行,互不影响。

参考
设计模式六大原则(二)----里式替换原则


依赖倒置原则(Dependency Inversion Principle, DIP)

定义

  1. 高层模块不应依赖于低层模块,两者都应该依赖于抽象。

    高层模块通常指的是应用程序中更接近业务逻辑的组件,而低层模块则是指那些实现具体功能的组件。这个原则强调的是,高层模块在设计时应该依赖于抽象接口或抽象类,而不是依赖于具体的实现类。

  2. 抽象不应依赖于细节,细节应依赖于抽象。

    这意味着在设计系统中,抽象层应该定义系统的运作方式,而具体实现则应该遵循这些抽象定义。这样,当具体的实现需要改变时,只要它们仍然符合抽象层的规定,系统的其他部分就不需要修改。

作用

  • 解耦:通过依赖抽象而不是具体实现,可以减少不同模块之间的耦合度。
  • 灵活性:系统更容易扩展,因为新的实现可以很容易地被插入到系统中,只要它们遵循相同的抽象接口。
  • 可测试性:由于抽象和实现被分离,可以更容易地为系统编写单元测试。

接口隔离原则(Interface Segregation Principle, ISP)

定义

客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。这意味着一个类不应该被强制实现一个它不使用的接口的所有方法。

作用

  • 降低耦合度:通过定义更小的、特定的接口,可以减少类之间的依赖关系,从而降低耦合度。
  • 提高灵活性:当系统需要变化时,可以实现只对特定的接口进行修改,而不会影响到其他部分。
  • 增强可维护性:较小的接口更容易理解和实现,有助于提高代码的可维护性。
  • 促进重用:定义更小的接口可以使得它们更容易被重用在不同的场景中。

迪米特法则**(Law of Demeter, LoD)**

定义

又称为最少知识原则(Principle of Least Knowledge)

  1. 一个对象应该对其他对象有最少的了解
  2. 每个单元(类,模块等)应该只与它的直接朋友通信。

直接朋友:

  • 当前对象本身
  • 以参数的形式传入对象的方法的对象
  • 当前对象创建的对象
  • 当前对象的成员对象
  • 对象的成员对象创建的对象

作用

  1. 降低耦合度: 通过限制对象间的交互,可以减少他们之间的耦合度,使得系统更加模块化
  2. 提高可维护性:当系统中的一个部分发生变化时,其他部分不受影响,这有助于提高系统的可维护性。
  3. 增强封装性:迪米特法则鼓励封装对象的内部结构,只暴露必要的接口,这有助于保护对象的内部状态。
  4. 提高可读性:遵循迪米特法则的代码通常更加清晰和易于理解。

少用继承多用组合(合成复用)

定义

“少用继承多用组合(合成复用)”是面向对象设计中的一条重要原则,它强调在设计类和对象时,应优先考虑使用对象组合来实现功能,而不是通过继承来扩展功能。这个原则有助于创建更加灵活、可维护的软件系统。

作用

  1. 提高灵活性: 组合可以提供更大的灵活性,因为它允许在运行时动态地更改对象的组合。
  2. 降低耦合度:继承会创建强耦合,因为基类的变化可能会影响所有派生类。组合则可以减少这种耦合。
  3. 提高可维护性:使用组合可以使代码更容易理解和维护,因为每个类只关注自己的职责。
  4. 避免基类问题:在继承中,基类的实现细节可能会泄露给派生类,而组合则可以更好地封装这些细节。
  5. 促进重用:组合允许更细粒度的重用,因为不同的类可以组合相同的对象来实现不同的功能。

参考文章:

程序员必备的七大面向对象设计原则

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值