我正在编写一个实现可观察模式(而不是接口)的类,我正在考虑复制构造函数是否也应该复制监听器。
一方面,复制构造函数应该创建一个尽可能接近原始实例的实例,以便可以在显示上下文中交换它。
另一方面,这将假设听众可以应付这种事情。
有什么想法?有没有最好的做法?
答案 0 :(得分:5)
不要复制。监听器不知道新对象,也不期望接收与之相关的消息。
答案 1 :(得分:3)
答案取决于您想要发生的事情。
技术上你可以做三件事:
其他海报肯定是正确的1)可能是首选选项,只是因为在复制构造函数中执行2或3意味着观察者始终创建/复制。什么都不做允许稍后在必要时添加观察者。
然而,可以想象其他选项是正确的情况。如果您想要一个响应给定类的任何实例的观察者,无论如何创建,那么2)是正确的。如果您的观察者为该对象执行特定任务,并且不关心系统的其余部分,那么3)可能就是这样。
通常最好考虑一下您的系统如何工作,而不仅仅是遵循规则。如果这不是您要修改的代码,请询问所有者。如果您根本不知道自己想要发生什么,请选择1)并稍后添加观察者。
答案 2 :(得分:1)
我的偏好是不要复制听众。
侦听器是在原始对象上注册的,而不是副本 - 如果您决定使用复制构造函数作为原型模式的基础,那么您最终将使用相同的侦听器来侦听系统中的每个对象。
然而:与所有这些类型的问题一样,从最小开始(即不要复制),然后看看你是如何继续的。如果你发现自己在构造对象之后重复相同的代码,每次使用该构造函数(比如说超过3-4次),那么重新审视这个决定可能会很有成效。
答案 3 :(得分:0)
不要复制。