「告訴,不要問」原則是物件導向程式設計 (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
的負載以進行流量管理。
有興趣嗎? ?探索我的程式設計原理系列中的其他帖子!
隨時更新未來的貼文:
以上是幾秒鐘內解釋「告訴,不要問」原則的詳細內容。更多資訊請關注PHP中文網其他相關文章!