4
程序代碼獲取信息,然後做出決定。面向對象的代碼告訴對象做事情。不是工廠模式,違反了「告訴,不要問」的原則嗎?
亞歷克夏普
當我們使用的是Factory pattern,我們做出決定的基礎上,除了比工廠類的類的屬性,所以這並不違反Tell, Don't Ask principle?
程序代碼獲取信息,然後做出決定。面向對象的代碼告訴對象做事情。不是工廠模式,違反了「告訴,不要問」的原則嗎?
亞歷克夏普
當我們使用的是Factory pattern,我們做出決定的基礎上,除了比工廠類的類的屬性,所以這並不違反Tell, Don't Ask principle?
不,我們不違反。
當我們告訴 Factory類來創建一個對象實例時,所有的責任都在Factory類中。調用者對具體的類沒有影響。
工廠類本身也不會違反該規則。它正在做它必須做的事情:基於給定的規則(讓它被硬編碼或外部設置,或者更復雜一些)決定要生成什麼樣的對象。但是,每一個邏輯都在工廠方法中。
但是例如Factory類正在根據http://www.oodesign.com/factory-pattern.html示例中的Product狀態進行決策。 (詢問產品,然後做出決定) – Masoud
你的意思是根據產品ID?這不是問題,因爲只有Factory類可以知道所有可能的類,並且它具有決定使用哪個類的邏輯。你不能把這個責任委託給其他任何班級。 – gaborsch