“告诉,不要问”原则是面向对象编程 (OOP) 的基石,提倡设计封装其数据和操作该数据的方法的对象。这种方法通过增强封装来培育更可维护和更健壮的系统。
?理解“告诉,不要问”
“告诉,不要问”原则强调指导对象做什么,而不是检索数据并在外部进行处理。 它促进在对象本身内保留逻辑和状态。
您无需访问对象的数据来做出外部决策,而是直接指示对象执行内部操作。这种策略简化了代码,最大限度地减少了依赖,并提高了系统的可扩展性和可维护性。
???示例:传感器值监控
让我们检查一个涉及传感器值以及该值超过阈值时触发警报的场景。
“询问”方法
<code>class AskMonitor { private int value; private int limit; private String name; private Alarm alarm; public AskMonitor(String name, int limit, Alarm alarm) { this.name = name; this.limit = limit; this.alarm = alarm; } public int getValue() { return value; } public void setValue(int value) { this.value = value; } public int getLimit() { return limit; } public String getName() { return name; } public Alarm getAlarm() { return alarm; } }</code>用法:
<code>AskMonitor monitor = new AskMonitor("Temperature Sensor", 100, alarm); monitor.setValue(120); if (monitor.getValue() > monitor.getLimit()) { monitor.getAlarm().warn(monitor.getName() + " is too high"); }</code>“讲述”方法
通过“告诉,不要问”,该行为被集成到
类中。Monitor
<code>class TellMonitor { private int value; private int limit; private String name; private Alarm alarm; public TellMonitor(String name, int limit, Alarm alarm) { this.name = name; this.limit = limit; this.alarm = alarm; } public void setValue(int value) { this.value = value; if (this.value > this.limit) { alarm.warn(name + " is too high"); } } }</code>用法:
<code>TellMonitor monitor = new TellMonitor("Temperature Sensor", 100, alarm); monitor.setValue(120);</code>“Tell”版本通过将逻辑封装在
方法中,消除了外部决策。setValue
⭐ “只说,不问”的优点
✅
更强的封装:数据和行为紧密耦合。
✅
简洁的代码:通过内部化行为最小化外部逻辑。
✅
提高可维护性:更容易修改和扩展功能。
?何时“告诉”
✅
封装行为: 当一个对象本质上知道如何处理其数据时。
✅示例:一个 对象,意识到其限制,应该在超过该限制时自动触发警报。
Monitor
状态触发的操作: 当状态更改需要后续操作(例如通知、日志记录)时。
示例: 对象会在配置文件修改时自动更新活动日志。
UserProfile
?何时“询问”
✅
数据检索: 当需要数据而不改变对象的状态时。
✅示例: 检索 对象的电子邮件地址。
User
外部决策:当决策依赖于外部因素时。
示例: 获取 的姓名以从外部确定适当的问候语。
Person
✅ 责任委派:当对象协作时,一个对象需要另一个对象的数据来进行决策。
示例: A
Router
查询Server
的负载以进行流量管理。
?相关资源
有兴趣吗? ?探索我的编程原理系列中的其他帖子!
- 100秒讲解KISS设计原理
- 100秒讲解DRY原理
随时更新未来的帖子:
- 领英
- Github
- 推特/X
以上是几秒钟内解释'告诉,不要问”原则的详细内容。更多信息请关注PHP中文网其他相关文章!

本文解释了C标准模板库(STL),重点关注其核心组件:容器,迭代器,算法和函子。 它详细介绍了这些如何交互以启用通用编程,提高代码效率和可读性t

本文详细介绍了c中有效的STL算法用法。 它强调了数据结构选择(向量与列表),算法复杂性分析(例如,std :: sort vs. std vs. std :: partial_sort),迭代器用法和并行执行。 常见的陷阱

本文讨论了C中的动态调度,其性能成本和优化策略。它突出了动态调度会影响性能并将其与静态调度进行比较的场景,强调性能和之间的权衡

C 20范围通过表现力,合成性和效率增强数据操作。它们简化了复杂的转换并集成到现有代码库中,以提高性能和可维护性。

本文讨论了使用C中的移动语义来通过避免不必要的复制来提高性能。它涵盖了使用std :: Move的实施移动构造函数和任务运算符,并确定了关键方案和陷阱以有效

本文详细介绍了C中的有效异常处理,涵盖了尝试,捕捉和投掷机制。 它强调了诸如RAII之类的最佳实践,避免了不必要的捕获块,并为强大的代码登录例外。 该文章还解决了Perf

文章讨论了在C中有效使用RVALUE参考,以进行移动语义,完美的转发和资源管理,重点介绍最佳实践和性能改进。(159个字符)


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

Atom编辑器mac版下载
最流行的的开源编辑器

Dreamweaver CS6
视觉化网页开发工具

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

禅工作室 13.0.1
功能强大的PHP集成开发环境