【面向对象设计原则】SOLID

这篇具有很好参考价值的文章主要介绍了【面向对象设计原则】SOLID。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

单一职责原则(Single Responsibility Principle,SRP)

描述

There should never be more than one reason for a class to change。仅有一种原因引起类的改变。一个类只负责一个职责

特点

  1. 一个类负责一个单一职责,避免职责上的交叉实现
  2. 保证面向接口实现

参考

SRP

开放封闭原则(Open Closed Principle,OCP)

描述

新需求来临时,通过新增类实现,而不是修改已有类

特点

  1. 开放:对于扩展开放;封闭:对于更改封闭
  2. 任何类都不应该从具体类派生
  3. 代码实现初期,尽量抽象代码以隔绝变化
  4. 代码实现中期,尽量不改变已有代码,而是增加新的代码面对变化

参考

OCP

里氏替换原则(Liskov Substitution Principle,LSP)

描述

父类能出现的地方,可以直接用其子类替代

实现标准

  1. 子类必须完全实现父类的抽象方法,但不能覆盖父类的非抽象方法

  2. 子类可以实现自己特有的方法

  3. 当子类覆盖或实现父类的方法时,方法的前置条件(输入形参)要比父类方法的输入更宽松

    即父类接受参数类型为xx,则子类的参数类型应该比父类更宽松,可以是xx也可以是yy,即子类可以处理更多类型的输入参数

  4. 当子类的方法实现父类的抽象方法时,方法的后置条件(返回值)要比父类更加严格

    即父类的返回值类型为xx,则子类的返回值类型应该比父类更严格,可以是xx,或者是xx的子类,即子类的返回值类型需要更加具体,返回的结果应该是父类返回结果的子类

参考

后边再找

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

描述

使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖哪些他不需要的接口

实现标准

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

参考

ISP

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

描述

  1. 高层模块不应该依赖低层模块,两者都应该依赖其抽象
  2. 抽象不应该依赖细节,细节应该依赖抽象
  3. 核心思想:要面向接口变成,而不是面向实现编程

实例

from abc import ABC, abstractmethod

# 定义一个抽象类作为低层模块的抽象
class DataStorage(ABC):
    @abstractmethod
    def read_data(self):
        pass

    @abstractmethod
    def write_data(self, data):
        pass


# 低层模块的具体实现
class FileStorage(DataStorage):
    def read_data(self):
        print("Reading data from file")
        # 具体的读取文件的实现

    def write_data(self, data):
        print("Writing data to file")
        # 具体的写入文件的实现


# 高层模块依赖于低层模块的抽象接口
class DataManager:
    def __init__(self, storage: DataStorage):
        self.storage = storage

    def process_data(self):
        data = self.storage.read_data()
        # 对数据进行处理
        processed_data = self._process_data(data)
        self.storage.write_data(processed_data)

    def _process_data(self, data):
        # 数据处理的具体实现
        pass


# 创建低层模块的实例
file_storage = FileStorage()

# 创建高层模块的实例,并传入低层模块的实例
data_manager = DataManager(file_storage)

# 调用高层模块的方法进行数据处理
data_manager.process_data()

通过这样的设计,高层模块DataManager不依赖于低层模块FileStorage的具体实现,而是依赖于抽象接口DataStorage

最少知识原则(Least Knowledge Principle,LKP)

描述

  1. 从依赖者角度,只依赖应该依赖的对象
  2. 从被依赖者角度,只暴漏应该暴漏的方法

优点

  1. 降低了类之间的耦合度,提高了模块的相对独立性
  2. 由于亲和度降低,从而提高了类的可复用率和系统的扩展性

参考

LKP文章来源地址https://www.toymoban.com/news/detail-473026.html

到了这里,关于【面向对象设计原则】SOLID的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 设计模式—— 单一职责原则

    1,代码重用性(即:相同功能的代码,不用多次编写) 2,可读性(即:编程规范性,便于其他程序员的阅读和理解) 3,可扩展性(当需要增加新的功能时,非常的方便,称为可维护性) 4,可靠性(即:当我们增加新的功能时,对原来的功能没有影响) 5,使程序呈现高内

    2024年02月12日
    浏览(35)
  • 【C++设计模式】单一职责原则

    2023年8月26日,周六上午 目录 概述 一个简单的例子 用单一职责原则来设计一个简单的学生管理系统 单一职责原则(Single Responsibility Principle,SRP),它是面向对象设计中的一个基本原则。 单一职责原则的核心思想是,一个类应该只有一个引起它变化的原因。 换句话说, 一个

    2024年02月11日
    浏览(28)
  • 设计模式原则之:单一职责模式

      对类来说的,即一个类应该只负责一项职责。如类A负责两个不同的职责,职责1,职责2。当职责1需求变更而改变A时,可能造成职责2智行错误,所以要将类A的粒度分解为A1,A2

    2024年02月15日
    浏览(37)
  • 设计模式和七大原则概述及单一职责原则详解

    设计模式的目的 编写软件过程中,程序员面临着来自,耦合性,内聚性以及可维护性,扩展性,重用性等方面的挑战。设计模式是为了让程序,具有更好的 1.代码重用性(相同代码,不用重复编写) 2.可读性(编程规范性,便于其他程序员的阅读和理解) 3.可扩展性(当需要增加新

    2024年02月12日
    浏览(30)
  • 【8】c++设计模式——>单一职责原则

    C++面向对象三大特性之一的 封装 指的就是将单一事物抽象出来组合成一个类,所以我们在设计类的时候每个类中处理的是单一事物而不是某些事物的集合。让类的功能单一,不让类与具体的事物耦合。 设计模式中所谓的单一职责原则,就是对一个类而言,应该仅有一个引起

    2024年02月07日
    浏览(32)
  • 面向对象设计原则实验之“接口隔离原则”

    客户端不应该依赖那些它不需要的接口。 实验一 考虑一个安全系统。在这个系统中,有一些Door对象,可以被加锁和解锁,并且Door对象知道自己是开着还是关着。这个Door编码成一个接口,这样客户程序就可以使用那些符合Door接口的对象,而不需要依赖于Door的特定实现。 现

    2024年04月12日
    浏览(42)
  • 【设计模式】面向对象设计八大原则

    (1)依赖倒置原则(DIP) 高层模块(稳定)不应该依赖于低层模块(变化),二者都应该依赖于抽象(稳定)。 抽象(稳定)不应该依赖于变化),实现细节应该依赖于抽象(稳定)。 (2)开放封闭原则(OCP) 对扩展开放,对更改封闭。 类模块应该是可扩展的,但是不可

    2024年02月10日
    浏览(34)
  • 面向对象的设计原则

    设计模式:对软件设计中普遍存在(反复出现)的各种问题,所提出的解决方案。每一个设计模式系统地命名、解释和评价了面向对象系统中一个重要的和重复出现的设计 三大特性:封装、继承、多态 接口:若干抽象方法的集合 作用:限制实现接口的类必须按照接口给定的

    2024年02月10日
    浏览(29)
  • 01_面向对象的设计原则

    参考资料: 视频 书籍 《设计模式:可复用面向对象软件的基础》 面对复杂问题如何解决? 分解:分而治之,大问题分解成小问题。 抽象:忽视非本质的细节,处理泛化和理想化的对象模型。 面向对象 从语言实现看,是代码和数据的封装 是一系列的公共接口 某种拥有责任

    2024年02月13日
    浏览(33)
  • 基于面向对象基础设计——里氏替换原则

    在Java中,支持抽象和多态的关键机制之一是继承。正是使用了继承,我们才可以创建实现父类中抽象方法的子类。那么,是什么规则在支配着这种特殊的继承用法呢?最佳的继承层次的特征又是什么呢?在什么情况下会使我们创建的类层次结构掉进不符合开闭原则的陷阱中呢

    2024年02月14日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包