码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 「设计模式」六大原则之六:最小知识原则小结


    文章目录

    • 1. 最小知识原则(LOD)定义
    • 2. 什么是“高内聚”呢
    • 3. 什么是“松耦合”?
    • 4.应用举例

    「设计模式」六大原则系列链接:
    「设计模式」六大原则之一:单一职责小结
    「设计模式」六大原则之二:开闭职责小结
    「设计模式」六大原则之三:里氏替换原则小结
    「设计模式」六大原则之四:接口隔离原则小结
    「设计模式」六大原则之五:依赖倒置原则小结
    「设计模式」六大原则之六:最小知识原则小结

    六大原则体现很多编程的底层逻辑:高内聚、低耦合、面向对象编程、面向接口编程、面向抽象编程,最终实现可读、可复用、可维护性。

    设计模式的六大原则有:

    • Single Responsibility Principle:单一职责原则
    • Open Closed Principle:开闭原则
    • Liskov Substitution Principle:里氏替换原则
    • Law of Demeter:迪米特法则(最少知道原则)
    • Interface Segregation Principle:接口隔离原则
    • Dependence Inversion Principle:依赖倒置原则
      把这六个原则的首字母联合起来( L 算做一个)就是 SOLID (solid,稳定的),其代表的含义就是这六个原则结合使用的好处:建立稳定、灵活、健壮的设计。

    本文介绍 SOLID 中的第六个原则:最小知识原则。

    1. 最小知识原则(LOD)定义

    最小知识则的英文翻译是:Law of Demeter,缩写是 LOD。英文翻译为:The Least Knowledge Principle。

    产生于 1987 年美国东北大学(Northeastern University)的一个名为迪米特(Demeter)的研究项目,由伊恩·荷兰(Ian Holland)提出,被 UML 创始者之一的布奇(Booch)普及,后来又因为在经典著作《程序员修炼之道》(The Pragmatic Programmer)提及而广为人知。

    又叫迪米特法则 不好记,我们最好记成最小知识则。

    关于这个设计原则,我们先来看一下它最原汁原味的英文定义:

    Each unit should have only limited knowledge about other units: only units “closely” related to the current unit. Or: Each unit should only talk to its friends; Don’t talk to strangers.

    翻译成中文:

    每个模块(unit)只应该了解那些与它关系密切的模块(units: only units “closely” related to the current unit)的有限知识(knowledge)。或者说,每个模块只和自己的朋友“说话”(talk),不和陌生人“说话”(talk)。

    再转化一下理解:

    不该有直接依赖关系的类之间,不要有依赖;有依赖关系的类之间,尽量只依赖必要的接口(也就是定义中的“有限知识”)。

    2. 什么是“高内聚”呢

    所谓高内聚,就是指相近的功能应该放到同一个类中,不相近的功能不要放到同一个类中。相近的功能往往会被同时修改,放到同一个类中,修改会比较集中,代码容易维护。

    实际上,我们前面讲过的单一职责原则是实现代码高内聚非常有效的设计原则。

    3. 什么是“松耦合”?

    所谓松耦合是说,在代码中,类与类之间的依赖关系简单清晰。即使两个类有依赖关系,一个类的代码改动不会或者很少导致依赖类的代码改动。

    实际上,依赖注入、接口隔离、基于接口而非实现编程,以及今天讲的迪米特法则,都是为了实现代码的松耦合。

    4.应用举例

    • 比如我们设计了用户管理类UserManager用来管理登录,登出等操作供调用端调用,但是具体的登录登出中的写入,清空用户缓存功能调用端是不了解的。

    调用端 --> UserManager (用户管理类) --> UserCacheManager(用户缓存类)

    • 再比如 租客、房东(房间)和中介的关系。可以包含代码模式的思想,租客只需要和中介通信,至于房东(房间)的信息,交给中介去管理就好了,比如可以把房间信息封装到中介类中,提供一个方法即可。

    • 再比如明星、商业公司活动(或者粉丝见面会)和经济人的关系。

      总之:类 A 提供的 api 不满足 B 的需求,需要反复组合,这时候就需要一个中间类 C,用来协调 A 和 B 的关系,C 就是和事佬角色(中介角色)。

    参考:

    《设计模式之美》

    《重学 Java 设计模式》

    《Android 源码设计模式解析与实战》

  • 相关阅读:
    React——form的校验和验证规则(使用formik,yup)
    深入了解JVM和垃圾回收算法
    动态规划——数字三角形模型
    mac下修改vscode的代码提示键
    ant-design的Select组件采用自定义后缀图标(suffixIcon属性)时,点击该自定义图标没有反应,不会展示下拉菜单的问题
    从月薪8k到月薪30k,自动化测试究竟该怎样学...
    ChatGPT 串接到 Discord - 团队协作好助理
    Go-知识error
    前端学习开发之【Vue】-中
    你从未见过的,最全微服务架构实战详解,干货满满
  • 原文地址:https://blog.csdn.net/jun5753/article/details/126879908
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号