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