我正在編寫一個實現可觀察模式(而不是接口)的類,我正在考慮複製構造函數是否也應該複製監聽器。在複製構造函數中複製監聽器/觀察者
一方面,拷貝構造函數應該創建一個儘可能接近原始實例的實例,以便它可以在顯示上下文中換出。
另一方面,這將假設聽衆可以應付這種事情。
有什麼想法?有沒有最佳做法?
我正在編寫一個實現可觀察模式(而不是接口)的類,我正在考慮複製構造函數是否也應該複製監聽器。在複製構造函數中複製監聽器/觀察者
一方面,拷貝構造函數應該創建一個儘可能接近原始實例的實例,以便它可以在顯示上下文中換出。
另一方面,這將假設聽衆可以應付這種事情。
有什麼想法?有沒有最佳做法?
答案是這取決於你想要發生什麼。
有技術上的三件事情可以做:
其他海報如果僅僅是因爲在複製構造做2或3表示該觀察者總是創建/複製是肯定是正確的:1)可能是優選的選擇。如果有必要,無所事事可以在稍後添加觀察員。
但是,可以想像在其他選項是正確的情況下。如果你想,響應給定類的任何情況下,無論怎樣創建一個觀察者,然後2)是正確的。如果你的觀察者爲這個對象做了特定的任務,並且不關心繫統的其他部分,那麼3)可能就是這樣。
通常最好考慮一下你的系統如何工作,而不僅僅是遵循規則。如果這不是您正在修改的代碼,請詢問所有者。如果你根本不知道你想要發生什麼,請選擇1)並稍後添加觀察者。
不要複製。
不要複製。聽衆不知道新對象,也不期望接收與之相關的消息。
我的偏好是不要複製聽衆。
的聽衆都註冊了原來的對象上,而不是複製 - 如果你決定使用拷貝構造函數作爲原型模式的基礎上,那麼你會用相同的聽衆收聽幾乎每一個對象在系統中結束。
然而:與所有這些類型的問題,開始用最少的(即不復制),然後看看你的身體情況如何。如果你發現自己在構造對象後重復相同的代碼,每次使用該構造函數(比如說超過3-4次),那麼重新審視這個決定可能是有益的。