第5章 最少知识原则

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

一个对象应该对其他对象有最少的了解。

通俗地讲,一个类应该对自己需要耦合或调用的类知道得最少。

最小知识原则包含以下4层含义:

  • 只和朋友交流

    Only talk to your immedate friends(只喝直接朋友通信。)

    两个对象之间的耦合就成为朋友关系。

    朋友类:出现在在成员变量、方法的输入输出参数中的类成为成员朋友类,而出现在方法内部的类不属于朋友类。

  • 朋友间也是有距离的

    朋友类之间也不应该暴露太多方法。

  • 是自己的就是自己的

    如果一个方法放在本类中,既不增加类间关系,也对本类不产生负面影响,就放置在本类中。

  • 谨慎使用Serializable

    可能会因为对类的更改未在服务器和客户端之间同步而引起序列化失败问题。

最佳实践:

类间解耦,弱耦合。但其要求的结果就是产生大量的中转或跳转类,导致系统的复杂性提高,同时也为维护带来了难度。如果一个类跳转两次以上才访问到另一个类,就需要想办法进行重构了。

转载于:https://www.cnblogs.com/qwertWZ/archive/2012/12/27/2835891.html

《设计模式之禅》学习笔记(五)相关推荐

  1. 设计模式之禅学习笔记

    设计模式 一,六大设计原则[SOLID] 1,单一职责[SRP]:应该有且仅有一个原因引起类的变更. "职责"和"变化原因"都是不可度量的,因项目和实际环境而异 ...

  2. 设计模式之禅学习总结

    设计模式之禅学习总结 单一职责原则 SRP 里式替换原则 LSP 依赖倒置原则 DIP 接口隔离原则 迪米特法则LoD 开闭原则: 单例模式 单例模式的通用类图如下图 单例模式的优点 单例模式的缺点 ...

  3. 《设计模式之禅》笔记序言(附源码链接)

    <设计模式之禅>笔记序言(附源码链接) GitHub链接 2021年9月初,我下定决心要从书本出发,建立自己的技术栈基础体系.在此过程中,从阅读的部分书籍的源代码导读中,我发现其中有迹可循 ...

  4. python函数是一段具有特定功能的语句组_Python学习笔记(五)函数和代码复用

    本文将为您描述Python学习笔记(五)函数和代码复用,具体完成步骤: 函数能提高应用的模块性,和代码的重复利用率.在很多高级语言中,都可以使用函数实现多种功能.在之前的学习中,相信你已经知道Pyth ...

  5. Ethernet/IP 学习笔记五

    Ethernet/IP 学习笔记五 Accessing data within a device using a non-time critical message (an explicit mess ...

  6. StackExchange.Redis学习笔记(五) 发布和订阅

    StackExchange.Redis学习笔记(五) 发布和订阅 原文:StackExchange.Redis学习笔记(五) 发布和订阅 Redis命令中的Pub/Sub Redis在 2.0之后的版 ...

  7. 吴恩达《机器学习》学习笔记五——逻辑回归

    吴恩达<机器学习>学习笔记五--逻辑回归 一. 分类(classification) 1.定义 2.阈值 二. 逻辑(logistic)回归假设函数 1.假设的表达式 2.假设表达式的意义 ...

  8. 好程序员教程分析Vue学习笔记五

    好程序员教程分析Vue学习笔记五,上次我们学习了Vue的组件,这次我们来学习一下路由的使用.在Vue中,所谓的路由其实跟其他的框架中的路由的概念差不多,即指跳转的路径. 注意:在Vue中,要使用路由, ...

  9. 【AngularJs学习笔记五】AngularJS从构建项目开始

    为什么80%的码农都做不了架构师?>>>    #0 系列目录# AngularJs学习笔记 [AngularJs学习笔记一]Bower解决js的依赖管理 [AngularJs学习笔 ...

  10. ROS学习笔记五:理解ROS topics

    ROS学习笔记五:理解ROS topics 本节主要介绍ROS topics并且使用rostopic和rqt_plot命令行工具. 例子展示 roscore 首先运行roscore系列服务,这是使用R ...

最新文章

  1. mybatisgenerator使用_MyBatis Generator,帮你少写50%代码的自动化工具,你用过吗?
  2. 循环神经网络:RNN、LSTM、GRU、BPTT
  3. php redbean update,redbeanphp和表前缀
  4. 【BZOJ2728】[HNOI2012]与非 并查集+数位DP
  5. python特征工程插件_手把手教你用Python实现自动特征工程
  6. 玩Java 8 – Lambda,路径和文件
  7. Android的布局
  8. 连载《一个程序猿的生命周期》-6、自学C++,二级考过后,为工作的机会打下了基础...
  9. Android RecyclerView布局动画
  10. python以写模式打开录入_Python基础06
  11. 计算机网络安全中的破译定义,计算机网络安全
  12. 傅里叶变换对应的matlab函数,用MATLAB如何实现傅里叶变换
  13. 立春好消息:华章图书持续霸榜京东、当当计算机畅销新书榜!
  14. html背景图片大小嵌套,div嵌套div 背景图片 不显示的问题
  15. unicode转中文
  16. java转大写_java实现数字转大写的方法
  17. 福岛第一核电站的辐射水平已明显下降
  18. linux怎么读取光盘文件,linux怎么读取光盘里的文件?
  19. 用adb工具给智能电视安装应用(在电视没法安装应用的情况下可用)
  20. 量化投资工具-AKShare是如何进行投资交易的?

热门文章

  1. 多线程新浪新闻搜索网络爬虫-基于关键字
  2. 无人驾驶汽车系统入门系列
  3. 手把手教你搭建Nginx-rtmp流媒体服务器+使用ffmpeg推流
  4. 用Grafana为Elasticsearch做日志分析
  5. CentOs基础操作指令(压缩、定时任务调度)
  6. toj 4611 Repairing a Road
  7. 小程序 - 腾讯云 - wafer - PHP - 数据库接口的应用和研究 - 01 - DB::insert
  8. java jlist_Swing开发之JList篇
  9. apereo cas开发_Apereo CAS Server服务端搭建教程
  10. json转excel_如何快速把json数据转到excel表格,方便个人查看