2013-05-03 78 views
1

有兩種模式:觀察者和裝飾者。兩者都使我能夠在完成某件事之後添加一個動作(或之前爲裝飾者)。但是它們的實現不同。所以什麼時候應該使用裝飾者或觀察者。什麼時候應該使用裝飾/觀察者?

到目前爲止,我想出了這一點:

  • 裝飾:添加業務functionnality到會改變由裝飾服務所使用的實體的狀態的服務。

  • 觀察員:更新視圖模型/ GUI,連接基礎設施服務,改變其他實體

例如,在一個預定的水平我有一個預定實體的狀態下,第一服務將創建預訂並標記爲不可用的住宿:客戶使用CC自動化支付觀察者

    • 發送電子郵件給客戶/所有者裝飾
    • 更新與可用性的住宿視圖/緩存:觀察者
    • 標記預訂「必須被驗證或驗證」:裝飾

    我說得對不對?

  • 回答

    0

    觀察員是行爲模式。 裝飾者是一個結構模式

    使用觀察者實現事件處理(它將不同類的一些方法調用相互綁定)。 使用裝飾您可以在運行時改變(延長)一些物體的特性(它改變了對象本身 - 感謝polymorphysm,所以同樣的方法可以覆蓋等)。

    在您的示例應用程序預訂,我會用這兩種模式(如你給出的話)。

    1

    這兩種模式是不相似。如果您需要對對象承擔額外的責任,則應使用裝飾器,而保持相同的接口。我不明白爲什麼你需要在這種情況下保持相同的接口,因此我反對裝飾者。

    觀察是好的,當你想在其他對象(例如「加一個動作是東西做完之後」)通知的變化,雖然可能有更簡單的方法。

    +0

    正如我所說的,對我來說它們有助於爲同一目的:添加功能到現有的業務流程。即使它不是同一種模式,目的也是一樣的。 – 2013-05-03 14:42:56

    +0

    如果你只想「添加功能」,有很多方法可以做到,可能你不需要任何設計模式。面向對象的設計模式具有特定的和獨特的用途和用例,並且只能在這些情況下使用。 – lbalazscs 2013-05-05 21:42:09

    相關問題