单一职责、接口隔离、依赖倒转、里氏替换、开闭原则、迪米特、合成复用

单一职责原则&开闭原则&其他开发原则 一个类应该有且仅有一个引起它变化的原因(即一个类只负责一个职责)。 阅读详情

用抽象构建架构,用实现扩展细节。

  • 单一职责原则:实现类要职责单一;
  • 接口隔离原则:在设计接口的时候要精简单一;
  • 依赖倒转原则:面向接口编程;
  • 里氏替换原则:不要破坏继承关系;
  • 开闭原则原则:对扩展开发,对修改关闭;
  • 迪米特法则:最少知道原则;
  • 合成复用原则:先考虑组合或聚合,后考虑继承;

一、单一职责原则

1、目的

降低代码复杂度、降低系统耦合度、提高可读性

2、定义

对于一个类,只有一个引起该类变化的原因;该类的职责是唯一的,且这个职责是唯一引起其他类变化的原因。

3、具体实现

将不同的职责封装到不同的类或者模块中,当有新的需求将现有的职责分为颗粒度更小的职责的时候,应该及时对现有代码进行重构。

4、优点

(1)降低类的复杂度,一个类只负责一个职责。这样写出来的代码逻辑肯定要比负责多项职责简单得多。

(2)提高类的可读性,提高系统的可维护性。

(3)降低变更引起的风险。变更是必然的,如果单一职责原则遵守得好,当修改一个功能的时候可以显著降低对其他功能的影响。

5、注意事项和细节

(1)降低类的复杂度,一个类只负责一项职责;

(2)提高类的可读性,可维护性;

(3)降低变更引起的风险;

(4)通常情况下,我们应当遵守单一职责原则,只有逻辑足够简单、才可以在代码级违反单一职责原则,只有类中的方法足够少,才可以在类中保持方法级别的单一职责原则。

二、接口隔离原则

1、目的

避免接口过于臃肿

2、定义

客户端不应该依赖它不需要的接口,一个类对另一个类的依赖应该建立在最小的接口上。

3、具体实现

适度细化接口,将臃肿的接口拆分为独立的几个接口。

4、优点

(1)将臃肿庞大的接口分解为多个粒度小的接口,可以预防外来变更的扩散,提高系统的灵活性和可维护性。

(2)接口隔离提高了系统的内聚性,减少了对外交互,降低了系统的耦合性。

(3)使用多个专门的接口还能够体现对象的层次,因为可以通过接口的继承,实现对总接口的定义。

(4)能减少项目工程中的代码冗余。过大的大接口里面通常放置许多不用的方法,当实现这个接口的时候,被迫设计冗余的代码。

5、注意事项和细节

如果接口的粒度大小定义合理,能够保证系统的稳定性;但是,如果定义过小,则会造成接口数量过多,使设计复杂化;如果定义太大,灵活性降低,无法提供定制服务,给整体项目带来无法预料的风险。

三、依赖倒转原则

1、目的

避免需求变化导致过多的维护工作

2、定义

  • 高层模块不应该依赖底层模块,二者都应该依赖其抽象;
  • 抽象不应该依赖细节;
  • 细节应该依赖抽象。

每一个逻辑的实现都是由原子逻辑组成的,不可分割的原子逻辑就是低层模块(一般是接口,抽象类),原子逻辑的组装就是高层模块。在Java语言中,抽象就是指接口和或抽象类,两者都不能被直接实例化。细节就是实现类,实现接口或继承抽象类而产生的类就是细节,可以被直接实例化。

3、具体实现

面向接口编程,使用接口或者抽象类制定好规范和契约,而不去设计任何具体的操作,把展现细节的任务交给他们的实现类去完成。

4、DIP的好处

采用依赖倒置原则可以减少类间的耦合性,提高系统的稳定性,降低并行开发引起的风险,提高代码的可读性和可维护性。

5、DIP的几种写法

(1)接口声明依赖对象;

(2)构造函数传递依赖对象;

在类中通过构造函数声明依赖对象(好比spring中的构造器注入),采用构造器注入。

(3)Setter方法传递依赖对象

在抽象中设置setter方法声明依赖对象(spring中的方法注入)

6、深入理解

依赖倒转原则的本质就是通过抽象使各个类或模块实现彼此独立,不互相影响,实现模块间的松耦合。

在项目中使用这个规则需要以下原则:

(1)每个类尽量都要有接口或抽象类:依赖倒转的基本要求,有抽象才能依赖倒转;

(2)变量的表明类型尽量是接口或者抽象类;

(3)任何类都不应该从具体类派生;

(4)尽量不要重写基类已经写好的方法(里氏替换原则);

(5)结合里氏替换原则来使用:

接口负责定义public属性和方法,并且声明与其他对象的依赖关系;

抽象类负责公共构造部分的实现;

实现类准确的实现业务逻辑,同时在适当的时候对父类进行细化;

一句话,依赖倒转原则就是面向接口编程。

四、里氏替换原则

1、目的

避免系统继承体系被破坏

2、定义

所有引用基类的地方必须能透明地使用其子类的对象。

3、具体实现

(1)子类可以实现父类的抽象方法,但是不能覆盖父类的非抽象方法;

(2)子类可以增加自己特有的方法;

(3)当子类覆盖或实现父类的抽象方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松;方法的后置条件(即方法的返回值)要比父类更严格。

(4)如果子类不能完整地实现父类的方法,或者父类的一些方法在子类中已经发生畸形,则建议断开继承关系,采用依赖,聚合,组合等关系继承。

4、代码实例

package designMode.advance.principle;

public class Liskov {
    public static void main(String[] args) {
        A a = new A();
        System.out.println("11-3=" + a.func1(11, 3));
        System.out.println("1-8=" + a.func1(1, 8));
        System.out.println("-----------------------");
        B b = new B();
        //因为B类不再继承A类,因此调用者,不会再func1是求减法
        //调用完成的功能就会很明确
        System.out.println("11+3=" + b.func1(11, 3));//这里本意是求出11+3
        System.out.println("1+8=" + b.func1(1, 8));// 1+8
        System.out.println("11+3+9=" + b.func2(11, 3));
        //使用组合仍然可以使用到A类相关方法
        System.out.println("11-3=" + b.func3(11, 3));// 这里本意是求出11-3
    }
}

//创建一个更加基础的基类
class Base {
    //把更加基础的方法和成员写到Base类
}

// A类
class A extends Base {
    // 返回两个数的差
    public int func1(int num1, int num2) {
        return num1 - num2;
    }
}

// B类继承了A
// 增加了一个新功能:完成两个数相加,然后和9求和
class B extends Base {
    //如果B需要使用A类的方法,使用组合关系
    private A a = new A();

    //这里,重写了A类的方法, 可能是无意识
    public int func1(int a, int b) {
        return a + b;
    }

    public int func2(int a, int b) {
        return func1(a, b) + 9;
    }

    //我们仍然想使用A的方法
    public int func3(int a, int b) {
        return this.a.func1(a, b);
    }
}

五、开闭原则

1、目的

提高扩展性、便于维护

2、定义

对扩展开放(对提供方),对修改关闭(对使用方)。

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

开闭原则是面向对象设计中最基础的设计原则,它指导我们如何建立稳定灵活的系统,开闭原则只定义了对修改关闭,对扩展开放。

因为抽象灵活性好,适应性广,只要抽象的合理,可以基本保证架构的稳定。而软件中易变的细节,我们用从抽象派生的实现类来进行扩展,当软件需要发生变化时,我们只需要根据需求重新派生一个实现类来扩展就可以了,当然前提是抽象要合理,要对需求的变更有前瞻性和预见性。

六、迪米特法则

1、目的

降低类与类之间的耦合度

2、定义

迪米特法则又叫最少知道原则,即一个类对自己依赖的类知道的越少越好,对于依赖的类不管有多复杂,都尽量将逻辑封装在类的内部,对外除了提供public方法,不泄漏任何信息。

更简单的说法:只与直接朋友通信。

直接朋友:每个对象都会与其它对象有耦合关系,耦合的方式有很多,依赖、关联、组合、聚合等。我们称出现在成员变量,方法参数,方法返回值中的类称为直接朋友,而出现在局部变量中的类不能称为直接朋友,也就是说,陌生的类不要以局部变量的形式出现在类的内部。

3、注意事项和细节

(1)在类的结构设计上,尽量降低类成员的访问权限;

(2)在类的设计上,优先考虑将一个类设计成不变类;

(3)在类的引用上,将引起其他类的次数降到最低;

(4)不暴露类的属性成员,而应该提供相应的访问器(getter、setter);

(5)谨慎使用序列化(serializable)功能;

过分的使用迪米特原则,会产生大量这样的中介和传递类,类之间需要通信就通过第三方转发的方式,就会造成系统的不同模块之间的通信效率降低、使系统的不同模块之间不容易协调等缺点,同时大大增加了系统的复杂度。所以在釆用迪米特法则时需要反复权衡,确保高内聚和低耦合的同时,保证系统的结构清晰。

4、代码实例

下面代码违反了迪米特法则,我平时就这么写的。。。

package designMode.advance.principle;

import java.util.ArrayList;
import java.util.List;

public class Demeter {
    public static void main(String[] args) {
        //创建了一个 SchoolManager 对象
        SchoolManager schoolManager = new SchoolManager();
        //输出学院的员工id 和  学校总部的员工信息
        schoolManager.printAllEmployee(new CollegeManager());
    }
}

//学校总部员工类
class Employee {
    private String id;

    public void setId(String id) {
        this.id = id;
    }

    public String getId() {
        return id;
    }
}


//学院的员工类
class CollegeEmployee {
    private String id;

    public void setId(String id) {
        this.id = id;
    }

    public String getId() {
        return id;
    }
}

//管理学院员工的管理类
class CollegeManager {
    //返回学院的所有员工
    public List<CollegeEmployee> getAllEmployee() {
        List<CollegeEmployee> list = new ArrayList<CollegeEmployee>();
        for (int i = 0; i < 10; i++) { //这里我们增加了10个员工到 list
            CollegeEmployee emp = new CollegeEmployee();
            emp.setId("学院员工id= " + i);
            list.add(emp);
        }
        return list;
    }
}

//学校管理类

//分析 SchoolManager 类的直接朋友类有哪些 Employee、CollegeManager
//CollegeEmployee 不是 直接朋友 而是一个陌生类,这样违背了 迪米特法则
class SchoolManager {
    //返回学校总部的员工
    public List<Employee> getAllEmployee() {
        List<Employee> list = new ArrayList<Employee>();

        for (int i = 0; i < 5; i++) { //这里我们增加了5个员工到 list
            Employee emp = new Employee();
            emp.setId("学校总部员工id= " + i);
            list.add(emp);
        }
        return list;
    }

    //该方法完成输出学校总部和学院员工信息(id)
    void printAllEmployee(CollegeManager sub) {

        //分析问题
        //1. 这里的 CollegeEmployee 不是  SchoolManager的直接朋友
        //2. CollegeEmployee 是以局部变量方式出现在 SchoolManager
        //3. 违反了 迪米特法则

        //获取到学院员工
        List<CollegeEmployee> list1 = sub.getAllEmployee();
        System.out.println("------------学院员工------------");
        for (CollegeEmployee e : list1) {
            System.out.println(e.getId());
        }
        //获取到学校总部员工
        List<Employee> list2 = this.getAllEmployee();
        System.out.println("------------学校总部员工------------");
        for (Employee e : list2) {
            System.out.println(e.getId());
        }
    }
}

使用迪米特法则改进:

//该方法完成输出学校总部和学院员工信息(id)
void printAllEmployee(CollegeManager sub) {

    //分析问题
    //1. 将输出学院的员工方法,封装到CollegeManager
    sub.printEmployee();

    //获取到学校总部员工
    List<Employee> list2 = this.getAllEmployee();
    System.out.println("------------学校总部员工------------");
    for (Employee e : list2) {
        System.out.println(e.getId());
    }
}
//管理学院员工的管理类
class CollegeManager2 {
    //返回学院的所有员工
    public List<CollegeEmployee> getAllEmployee() {
        List<CollegeEmployee> list = new ArrayList<CollegeEmployee>();
        for (int i = 0; i < 10; i++) { //这里我们增加了10个员工到 list
            CollegeEmployee emp = new CollegeEmployee();
            emp.setId("学院员工id= " + i);
            list.add(emp);
        }
        return list;
    }

    //输出学院员工的信息
    public void printEmployee() {
        //获取到学院员工
        List<CollegeEmployee> list1 = getAllEmployee();
        System.out.println("------------学院员工------------");
        for (CollegeEmployee e : list1) {
            System.out.println(e.getId());
        }
    }
}

简单来说,就是将获取学院员工的方法写到学校员工类中。

七、合成复用原则

1、目的

防止类的体系庞大

2、定义

它要求在软件复用时,要尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现。

如果要使用继承关系,则必须严格遵循里氏替换原则。合成复用原则同里氏替换原则相辅相成的,两者都是开闭原则的具体实现规范。

3、注意事项和细节

(1)通常的复用分为继承复用和合成复用,继承复用虽然有简单和易实现的优点,但它也有如下的缺点:

  • 继承复用破坏了类的封装性

因为继承会将父类的实现细节暴露给子类,父类对子类是透明的,所以这种复用又称为“白箱”复用。

  • 子类和父类的耦合度高

父类的改变会直接影响子类,不利于类的扩展和维护。

  • 限制了复用的灵活性

从父类继承而来的实现是静态的,在编译时已经定义,运行时无法发生变化。

(2)采用组合或聚合复用时,可以将已有对象纳入新对象中,使之成为新对象的一部分,新对象可以调用已有对象的功能,它有以下优点。

  • 维护了类的封装性

因为成分对象的内部细节是新对象看不见的,所以这种复用又称为“黑箱”复用。

  • 低耦合

这种复用所需的依赖较少,新对象存取成分对象的唯一方法是通过成分对象的接口。

  • 复用的灵活性高

这种复用可以在运行时动态进行,新对象可以动态地引用与成员对象类型相同的对象。

 

 

软件架构设计原则-开闭、依赖倒置、单一职责、接口隔离、迪米特、里氏替换、合成复用,附Java语言示例讲解 是指一个软件实体(如类、模块和函数)应该对外扩展开放,对修改关闭。所谓的关闭,也正是对扩展和修改两个行为的一个原则。它强调的是用抽象构建框架,用实现扩展细节,可以提高软件系统的可复用性和可维护性。开闭原则是面向对象设计的最基本原则,例如版本更新,可以实现尽量不修改源代码的前提下增加新功能。 阅读详情

相关推荐

Xilinx IP核 Block Memory Generator v8.4 的使用

本文主要介绍如何使用并初始化 Xilinx 提供的IP核 Block Memory Generator v8.4`,为了确保成功初始化,还对其进行了一个简单的仿真,更多细节请参考官方手册。

高阶近似的博客 1万+

设计模式-单一职责及接口隔离原则

一:单一职责原则 简单理解就是,一个类只负责一项职责。 若一个DAO类即可以操作user表,又可以操作order表,则不符合单一职责原则 应该分成两个DAO类(只有类中方法数量比较少,可以在方法级别上保持单一职责原则) 二:接口隔离原则 含义:一个类对另一个类的依赖应该建立在最小接口上,使用多个专门的接口比使用单一的总接口要好。 这么说可能不好理解,看完下边这个栗子,在看刚刚的定义,你会更容易理解。 举例: 有这样一个需求 系统中有三种角色,三个角色对订单的操作如下: 用户,只能有查询订单的方法 商家,只

qq_44913173的博客 1490

STM32 BootLoader 入门教程:从原理到 APP 跳转实现

在 STM32 项目开发中,BootLoader 通常用于实现固件升级、程序引导和应用程序校验。本文从最基础的 BootLoader 原理开始,讲解 STM32 内部 Flash 分区设计、APP 地址偏移、向量表重定位、BootLoader 跳转 APP 的核心代码,以及实际开发中常见的问题。本文适合刚开始接触 STM32 BootLoader、IAP 在线升级、串口升级、OTA 升级的开发者阅读。

lidecong133的博客 1675

Java设计原则之单一职责原则、开闭原则、里氏代换原则

Java面向对象的设计原则

人生处处是围城,一切都是最好的安排! 1481

ANSYS Workbench实战:用网格自适应搞定超弹性橡胶大变形仿真(附避坑命令流)

本文深入探讨了ANSYS Workbench中超弹性橡胶大变形仿真的网格自适应技术,重点解析了混合U-P单元的应用、非线性自适应网格的实战技巧及材料模型选择的注意事项。通过具体案例和命令流示例,帮助工程师有效解决橡胶仿真中的收敛问题和网格畸变挑战,提升仿真精度和效率。

weixin_42666036的博客 303

保姆级教程:在Ubuntu 22.04上搞定PX4 V1.14 + ROS2 Humble的HITL仿真(避坑实录)

本文提供在Ubuntu 22.04上配置PX4 V1.14与ROS2 Humble的HITL仿真环境的详细教程,涵盖环境准备、固件编译、QGroundControl配置、ROS2通信设置及联调测试。特别针对版本兼容性、Gazebo插件构建和MicroDDS配置等常见问题提供避坑指南,帮助开发者高效搭建无人机仿真系统。

weixin_30836759的博客 1005

设计模式之七大原则(一)——单一职责原则、开放-关闭原则

把创建Type1 类做成抽象类,并提供一个抽象的 type方法,让子类去实现即可,这样我们有新的水果种类时,只需要让新的水果类继承 Type1 ,并实现 type方法即可,使用方的代码就不需要修改了, 从而满足了开闭原则。简单说明一下,首先我们可以对某个类来说,即一个类应该只负责一项职责。当职责1需求变更而改变A时,可能造成职责2执行错误,所以需要将类A的粒度分解为A1,A2。在后来发现新问题,并不是所有的鸟类都会飞翔的,比如企鹅就不会了,修改时如果遵循单一职责原则的话,那么需要添加一个类。

qq_44307209的博客 1958

基于大模型的围术期谵妄防控系统研究报告

围术期谵妄是一种急性脑功能障碍综合征,通常发生在手术前后一段时间内。患者会出现意识障碍、注意力不集中、认知功能紊乱、睡眠 - 觉醒周期失调等症状,严重者甚至会出现幻觉、妄想和攻击行为 。这种病症不仅会给患者自身带来极大的痛苦,还会对其术后康复产生严重的负面影响。从患者角度来看,围术期谵妄会显著延长患者的住院时间,增加患者的医疗费用负担。有研究表明,发生谵妄的患者住院时间平均比未发生者延长 2 - 3 天。长时间的住院不仅会影响患者的生活质量,还可能导致患者错过最佳的康复时机,影响身体机能的恢复。同时,谵妄还

嵌入式毕设/课设资料清单(速查手册·文档模板·题库,持续更新)→ 见最新文章 1071

java设计模式之七大设计原则(2)

java设计模式之七大设计原则设计模式常用的七大原则:设计模式常用的七大原则有: 1) 单一职责原则 2) 接口隔离原则 3) 依赖倒转原则 4) 里氏替换原则 5) 开闭原则 ocp 6) 迪米特法则 7) 合成复用原则。本文将继续介绍后四个原则:里氏替换原则、OCP原则、迪米特法则、合成复用原则。

m0_51750419的博客 274

基于FreeSwitch与SIP UA的蓝牙电话坐席系统实战部署

本文详细介绍了如何基于FreeSwitch开源软交换平台,结合SIP UA软电话与蓝牙电话App,在局域网内搭建一套低成本、自主可控的电话坐席系统。文章提供了从环境准备、FreeSwitch安装配置、用户与拨号计划创建,到SIP软电话测试和蓝牙设备接入的完整实战部署流程,并给出了关键优化与排坑指南,适合小微团队或个人开发者构建内部通讯工具。

zeta9的博客 545

ArcGIS Pro 制作这种地图海报

ArcMap 版本与 ArcGIS Pro 版本的制图功能相差太多,无论从美观上还是制图效率都远远优于 ArcMap,用了一段时间的 ArcGIS Pro ,真心推荐有条件的大家赶紧试一试!一个软件也能搞定一张不错的海报哦!----吐槽:好的设计真的是门花时间的活,这个教程大概花了我7小时左右,我都忘了我自己教程中截图多少张了!(可能是我速度太慢了)测试数据:阿里云盘分享-----北极海冰数据.https://www.aliyundrive.com/s/SUhsnqfkmXh。

J_Giser的博客 1430

设计模式七大原则总结

设计模式七大原则 前言 本文主要内容来源于尚硅谷的设计模式视频,略带个人总结 1 单一职责原则(SRP) 一个类负责一项职责 eg:交通工具类,同时管理海陆空 可以拆分为多个类,分管海陆空(遵守单一职责原则,改动大) 一个类里边写多个方法(方法少的时候才用),分管海陆空(在类的级别上不遵守原则,但在方法上还是遵守的,改动小) 2 接口隔离原则(ISP) 总结:接口设计的不能太大(很多个方法),不然实现类需要同时实现很多个方法 拆分成多个接口 拆成最小的 3 依赖倒转原则(DIP) 依赖倒转原则(

weixin_43960117的博客 344

网络安全系列-四十三:使用Suricata分析恶意流量pcap文件

本文基于[网络安全系列-三十六:使用Suricata IDS分析pcap文件]和 [网络安全系列-四十二: Suricata之rulesets的激活、更新及动态加载]的基础上,使用suricata针对包含恶意流量的pcap文件进行分析,触发事件告警,并对suricata输出的日志进行逐个分析,让你掌握针对恶意流量的分析步骤,及怎么查看suricata输出的日志。

penriver的博客 2889

设计模式七大原则小记(单一原则、接口隔离原则、依赖倒转原则、里氏替换原则、开闭原则、迪米特法则、合成复用原则)

设计模式 设计模式是为了让程序(软件)具有更好的: 代码重用性,即相同功能的代码,不用多次编写; 可读性,即编程规范性,便于其他程序员的阅读和理解 可扩展性,即当需要增添其他新功能的时候,非常的方便; 可靠性,即添加了新的功能之后对原来的功能没有影响; 使程序呈现高内聚、低耦合的特性。 设计模式七大原则 设计模式原则,其实就是程序员在编程时,应该遵守的原则,也是各种设计模式的基础。 设计模式常用的七大原则有: 单一职责原则; 接口隔离原则; 依赖倒转原则; 里氏替换原则; 开闭原则; 迪米特法则; 合

HappySundlut的博客 325

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

面向对象的设计原则

面向对象的三大特性:封装、继承、多态面向对象的七(或五大原则,前五项)大基本原则:单一职责原则(SRP) 、开放封闭原则(OCP) 、(LSP)、 依赖倒置原则(DIP)、 接口隔离原则(ISP)、迪米特法则(Law Of Demeter)、组合/聚合复用原则(Composite/Aggregate Reuse Principle CARP)

weixin_52498761的博客 391

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

设计模式7大原则详解

文章目录一、单一职责二、接口隔离(Interface Segregation)三、依赖倒转(Dependence Inversion)四、里氏替换原则五、开闭原则(Open Close PrincIple)六、迪米特法则(Demeter Principle)七、合成复用原则(Composite Reuse Principle) 本文结合demo,总结下设计模式的几个原则,掌握设计模式的原则,才能真...

雨剑的博客 332

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

java 7大设计原则

一、设计模式七大原则 设计模式的目的 代码重用性 (即:相同功能的代码,不用多次编写) 可读性 (即:编程规范性, 便于其他程序员的阅读和理解) 可扩展性 (即:当需要增加新的功能时,非常的方便,称为可维护) 可靠性 (即:当我们增加新的功能后,对原来的功能没有影响) 使程序呈现高内聚,低耦合的特性 有点官方,反正就是牛逼! 1.1、单一职责原则 介绍: 一个类应该只负责一项职责。如类 A 负责两个不同职责:职责 1,职责 2。当职责 1 需求变更 而改变 A 时,可能造成职责 2 执行错误 以

qq_47848696的博客 1295

设计模式的七大设计原则总结(全方面详细总结)

1.单一职责原则 对类来说,一个类应该只负责一项职责(并不是一个类只有一个方法,可以有多个方法,这些方法共同完成一项职责)。 如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力;这种耦合会导致脆弱的设计,当发生变化时,设计会遭受到意想不到的破坏。 软件设计真正要做的许多内容,就是要发现职责并把那些职责相互分离。 如果你能够想到多于一个的动机去改变一个类,那么这个类就具有多于一个的职责。 通常情况下,我们应当遵守单一职责原则,只有当逻辑足够简单时,

MrYushiwen的博客 942

必须知道的软件设计七大原则

作为一名软件工程师,软件设计是您工作必不可少的一项,那么我们如何设计出扩展性更好,灵活性更高,可读性,可靠性,可重用性更高的高内聚低耦合的代码呢?我们只有更深入的了解这七大原则,更好的应用设计模式,才能设计出更好的产品。

zhj52666的博客 1562

设计模式(一)——设计模式的七大原则

一、引子 1.1 设计模式常用的七大原则有: 1) 单一职责原则 2) 接口隔离原则 3) 依赖倒转原则 4) 里氏替换原则 5) 开闭原则ocp 6) 迪米特法则 7) 合成复用原则 1.2 几个经典的设计模式面试题 1.2.1 金融借贷平台项目——状态模式 借贷平台的订单,有审核发布抢单等等步骤,随着操作的不同,会改变订单的状态,项目中的这个模块实现就会使用到状态模式,请你使用状态模式进行设计,并完成实际代码 问题分析 这类代码难以应对变化,在添加一种状态时,我...

一直走,不要回头 1510

Java 七大原则

Java 七大原则

qq_28933825的博客 350

设计模式——七大原则

单一职责原则指的是一个类只能执行一个职责.假设一个类执行了两个职责,当第一个职责发生变动时,肯可能会导致第二个职责执行错误.接口隔离原则指的是当一个类通过接口依赖于另一个类时应该建立在最小的接口的基础上.依赖倒转的规则有5条高级模块不依赖于低级模块.低级模块和高级模块应该都依赖于抽象(接口或抽象类)抽象不应该依赖于细节,细节应该依赖于抽象依赖倒转原则的核心是面向接口编程依赖倒转原则的设计理念是相对于细节的多变性,抽象的东西要稳定的多.使用接口和抽象类来设计规范。

weixin_52477733的博客 861

java设计七大原则

1.1.单一职责原则(总)每个类应该实现单一的职责,不过职责可拆,则把类拆分。1.开闭原则一个软件实体如类、模块、函数应该对扩展开放,对修改关闭。(不去改接口,不去改实体类,用子类去继承实体类,重载实体类的方法得到业务的扩展)2.里氏替换原则子类可以扩展父类的功能,但是不能改变父类原有的功能。 2.1子类可以实现父类的抽象方法,但是不能重写父类的非抽象方法。 2.2子类可以增加自己特有...

weixin_36552034的博客 414

随笔-设计模式七大原则

七大原则 单一职责原则 接口隔离原则 依赖倒转原则 里氏替换原则 开闭原则 迪米特法则 合成复用原则 七大原则的目的:降低耦合度,提高维护性、拓展性、重用性,可靠性。 一、单一职责原则 对类来说,一个类应该只负责一项职责,不能把所有功能都耦合到一起。这样可以降低类的复杂度,提高可读性和可维护性,降低了变更引发的风险。总的来说,就是一个类中,方法足够少,逻辑足够简单,才能保持单一职责。 单一职责可以是类级别的,也可以是方法级别的,依据实际情况来决定使用。 二、接口隔离原则 一个类通过一个接口依赖接口的实现

eryou_979的博客 325

面向对象设计原则理解+记忆

面向对象设计原则理解 记忆口诀 开口合里最单依 开:开闭原则 口:接口隔离原则 合:合成复用原则 里:里氏替换原则 最:最少知识原则,迪米特法则 单:单一职责 依:依赖倒转原则 开闭原则(Open-Closed Principle OCP) 面向对象的可复用设计的第一块基石,它是最重要的面向对象设计原则 一个软件的实体应对扩展开放,对修改关闭。设计一个模块的时候,应当使这个模块在不被修改的前...

newzhong 837

设计模式(一) —— 七大原则

设计模式七大原则 简介 设计模式的原则,其实就是程序员在编程时,应当遵守的原则,也是各种设计模式的基础(即:设计模式为什么这样设计的依据) 设计模式常用的七大原则 单一职责原则 接口隔离原则 依赖倒转(倒置)原则 里氏替换原则 开闭原则 迪米特法则 合成复用原则 1. 单一职责原则 基本介绍 定义:不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责,应该仅有一个引起它变化的原因 解释 ​ 说到单一职责原则,很多人都会不屑一顾。因为它太简单了。稍有经验的程序员即使从来没有读过设计模式、从来

qq_45473439的博客 407
上一篇: 【计算机网络 22】基础知识总结
下一篇: 【Spring Cloud 2】注册中心Eureka
哪 吒
哪 吒 2022年度博客之星TOP 1 2022年度博客之星TOP 1 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄9年 59万+粉丝 2953原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哪 吒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值