• 设计模式6大原则


    ●开闭原则

    对扩展开放,对修改关闭,在代码层面而言就是在你有新的需求的时候,你应当增加新的对象来实现,而不是修改原来的对象

    继承

    ●里氏替换原则

    基类可以出现,那么子类一定也能行

    • 子类必须实现父类的抽象方法,但不得重写(覆盖)父类的非抽象(已实现)方法

    • 子类中可以增加自己特有的方法

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

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

    接口隔离原则

    用多个专门的接口比使用单一的总接口要好。一个类对另外一个类的依赖性应当是建立在最小的接口上的;

    一个接口代表一个角色,不应当将不同的角色都交给一个接口。没有关系的接口合并在一起,形成一个臃肿的大接口,这是对角色和接口的污染。

    举个栗子:类A通过接口I依赖类B,类C通过接口I依赖类D,如果接口I对于类A和类B来说不是最小接口,则类B和类D必须去实现他们不需要的方法。

    解决方案:将臃肿的接口I拆分为独立的几个接口,类A和类C分别与他们需要的接口建立依赖关系

    ●依赖倒转原则

    针对接口编程

    高层模块不应该依赖低层模块,两者都应该依赖其抽象,抽象不应该依赖细节,细节应该依赖抽象

    也就是说,尽量依赖接口,不要依赖细节

    例如:类A直接依赖类B,假如要将类A改为依赖类C,则必须通过修改类A的代码来达成。这种场景下,类A一般是高层模块,负责复杂的业务逻辑;类B和类C是低层模块,负责基本的原子操作;假如修改类A,会给程序带来不必要的风险。

    解决方案:将类A修改为依赖接口I,类B和类C各自实现接口I,类A通过接口I间接与类B或者类C发生联系,则会大大降低修改类A的几率。

    ●迪米特法则,最少知道原则

    减少耦合

    又叫做最少知道原则,就是说一个对象应当对其它对象有尽可能少的了解,类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另一个类的影响也越大,所以一个对象应该对其他对象保持最少的了解,也就是说,对于被依赖的类来说,无论逻辑多么复杂,都尽量地的将逻辑封装在类的内部,对外除了提供的public方法,不对外泄漏任何信息,迪米特法则初衷在于降低类之间的耦合。由于每个类尽量减少对其它类的依赖,因此。很容易使得系统的功能模块独立,相互之间不存在(或很少代码体现有)依赖关系。

    举个栗子:Leader想从Teacher那里知道现有Student的的总数,它们之间的调用关系应该为Leader—>Teacher—>Student,Leader与Student并无直接联系,所以在Leader类的方法中不应该出现Student类

    ●单一职责原则适用于类、接口、方法
    单一职责原则简称 SRP ,顾名思义,就是一个类只负责一个职责。那这个原则有什么用呢,它让类的职责更单一。这样的话,每个类只需要负责自己的那部分,类的复杂度就会降低。如果职责划分得很清楚,那么代码维护起来也更加容易。试想如果所有的功能都放在了一个类中,那么这个类就会变得非常臃肿,而且一旦出现bug,要在所有代码中去寻找;更改某一个地方,可能要改变整个代码的结构,想想都非常可怕。当然一般时候,没有人会去这么写的。

    当然,这个原则不仅仅适用于类,对于接口和方法也适用,即一个接口/方法,只负责一件事,这样的话,接口就会变得简单,方法中的代码也会更少,易读,便于维护。

    事实上,由于一些其他的因素影响,类的单一职责在项目中是很难保证的。通常,接口和方法的单一职责更容易实现。

  • 相关阅读:
    路径规划 | 飞蛾扑火算法求解二维栅格路径规划(Matlab)
    C++17使用std::optional表示一个可能存在的值
    sap 进行dubgger看表数据
    现在的我,不想做管理
    【网络安全带你练爬虫-100练】第21练:批量获取文件夹中文件名
    vue3 Composition API 组合式api
    Linux命令行操作:使用“more“命令进行分页显示
    AJAX 请求
    Mask Transfiner for High-Quality Instance Segmentation
    【计算机视觉】在计算机视觉里,传统卷积已经彻底输给Transformer了吗?
  • 原文地址:https://blog.csdn.net/weixin_47796247/article/details/127891117