【设计模式】详细聊聊软件设计的七大原则

软件设计原则

【设计模式】详细聊聊软件设计的七大原则_第1张图片

软件设计原则是指在进行软件系统设计时所遵循的一系列指导原则,它们旨在帮助软件工程师设计出高质量易维护可扩展可重用的软件系统。这些原则是经过实践验证的,能够在软件开发的各个阶段提供指导和支持。七大软件设计原则,也被称为设计模式原则,是《设计模式:可复用面向对象软件的基础》一书中提出的。下面详细介绍这七大原则:

  1. 单一责任原则 (Single Responsibility Principle, SRP)
    记忆关键句:一个类只做好一件事!
    这个原则指出一个类或模块应该只有一个引起变化的原因。换句话说,一个类只应该有一个职责。如果一个类具有多个职责,那么当需求发生变化时,需要修改这个类的可能性就会增加,导致系统的不稳定性。单一责任原则有助于使代码更容易理解、维护和扩展。

    优点:

    1. 提高可维护性:当一个类只负责一个功能时,实现通常更简单,更直接,这使得理解和维护变的更加容易。
    2. 减少代码修改的影响:更改影响较小的部分,因此减少了对系统其他部分的潜在破坏。
  2. 开闭原则 (Open/Closed Principle, OCP)
    记忆关键句:对拓展开放,对修改关闭
    这个原则指出软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。简单来说,当需要改变一个软件系统的行为时,不应该修改已有的代码,而是应该通过扩展现有代码来实现新的功能。这可以通过使用抽象化、多态等技术来实现,从而降低修改现有代码可能引入的风险。
    【设计模式】详细聊聊软件设计的七大原则_第2张图片

    优点:

    1. 促进可扩展性:可以在不修改现有代码的情况下扩展功能,这意味着新的功能可以添加,而不会影响旧的功能。
    2. 降低风险:由于不需要修改现有代码,因此引入新错误的风险较低。
  3. 里氏替换原则 (Liskov Substitution Principle, LSP)
    记忆关键句:子类必须能够替换其基类
    里氏替换原则是关于继承多态的原则。它指出子类型必须能够替换基类型,而不破坏程序的正确性。换句话说,使用基类的地方应该能够透明地使用其子类,而不需要修改代码。如果一个类违反了里氏替换原则,那么在使用多态时可能会导致意外的行为。
    【设计模式】详细聊聊软件设计的七大原则_第3张图片

优点:

  1. 提高代码的可互换性:能够用派生类的实例替换基类的实例,使得代码更加模块化,提高了其灵活性。
  2. 增加代码的可重用性: 遵循LSP的类和组件更容易被重用于不同的上下文。
  1. 依赖倒置原则 (Dependency Inversion Principle, DIP)
    记忆关键句:程序要依赖于抽象接口而不是具体的实现
    依赖倒置原则强调了高层模块不应该依赖于低层模块,二者都应该依赖于抽象。具体来说,抽象不应该依赖于细节,细节应该依赖于抽象。这个原则通常通过依赖注入、依赖注入容器等技术来实现,从而实现模块之间的解耦合。
    在这里插入图片描述

优点:

  1. 提高代码的可测试性:通过依赖于抽象而不是具体实现,可以轻松的对代码进行单元测试。
  2. 减少系统的耦合:系统的高层模块不依赖于底层模块的具体实现,从而使得系统更加灵活和可维护。
  1. 接口隔离原则 (Interface Segregation Principle, ISP)
    记忆关键句:使用小的专门的接口而不要使用大的总接口
    接口隔离原则指出一个类不应该依赖于它不需要的接口。如果一个接口在一个类中的某个场景下没有用到,那么这个接口就不应该强加给这个类。相反,应该将接口分解为更小的、更具体的接口,从而使得客户端只需知道与其相关的方法即可,避免了对不必要方法的依赖。
    在这里插入图片描述

    优点:

    1. 减少系统的耦合:通过使用专门的接口而不是一个大而全的接口,系统中的不同部分之间的依赖性减少了。
    2. 提升灵活性和稳定性:更改一个小的接口比更改一个大的接口风险更低,更容易管理。
  2. 迪米特法则 (Law of Demeter, LoD)
    记忆关键句:只和你的直接朋友交谈,不和“陌生人”讲话
    迪米特法则也被称为最少知识原则。它指出一个对象应该对其他对象有尽可能少的了解,不要和陌生人说话。换句话说,一个对象应该只和其直接的朋友进行交流,而不是和朋友的朋友交流。这可以降低对象之间的耦合度,使得系统更加灵活、易维护。
    【设计模式】详细聊聊软件设计的七大原则_第4张图片

  3. 合成复用原则 (Composite Reuse Principle, CRP)
    记忆关键句:优先使用组合或者聚合等关联关系实现,其次才考虑继承关系实现
    合成复用原则指出应该优先使用对象组合,而不是继承来实现代码的复用。通过将对象组合起来形成更大的对象,可以使得系统更加灵活、易于扩展。相比之下,继承关系的修改会牵一发而动全身,增加了系统的复杂度。
    【设计模式】详细聊聊软件设计的七大原则_第5张图片

这七大原则提供了软件设计的指导原则,有助于设计出易于理解、扩展和维护的高质量软件系统。在实际开发中,软件工程师应该根据具体情况灵活运用这些原则,以求达到最佳的设计效果。

你可能感兴趣的:(设计模式学习,设计模式,java,python,java-ee,软件设计原则)