“告诉,不要问”原则是面向对象编程 (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>
方法中,消除了外部决策。setValue
更强的封装:数据和行为紧密耦合。
✅
简洁的代码:通过内部化行为最小化外部逻辑。
✅
提高可维护性:更容易修改和扩展功能。
封装行为: 当一个对象本质上知道如何处理其数据时。
✅示例:一个 对象,意识到其限制,应该在超过该限制时自动触发警报。
Monitor
状态触发的操作: 当状态更改需要后续操作(例如通知、日志记录)时。
示例: 对象会在配置文件修改时自动更新活动日志。
UserProfile
数据检索: 当需要数据而不改变对象的状态时。
✅示例: 检索 对象的电子邮件地址。
User
外部决策:当决策依赖于外部因素时。
示例: 获取 的姓名以从外部确定适当的问候语。
Person
✅ 责任委派:当对象协作时,一个对象需要另一个对象的数据来进行决策。
示例: A
Router
查询Server
的负载以进行流量管理。
有兴趣吗? ?探索我的编程原理系列中的其他帖子!
随时更新未来的帖子:
以上是几秒钟内解释'告诉,不要问”原则的详细内容。更多信息请关注PHP中文网其他相关文章!