我知道Singleton或Monostate是什么以及如何实现它们。虽然我可以看到Singleton的许多用途,但我无法想象我想让用户创建尽可能多的我的类实例的情况,尽管实际上只有一个真正存在于幕后。
有人可以帮我吗?我知道由于几个原因,人们应该远离这两种模式,但从理论上讲,Monostate模型会出现什么样的问题?
由于
答案 0 :(得分:3)
Monostate,在我看来,不是您可能在应用程序级别实现的模式,但在基础结构级别可能很有用。 This comment on Alex Martelli's presentation of the pattern in Python提供了一个说明性示例。
考虑一个DCOM或.NET远程处理场景,我们在服务器上有一个表示名为Bob的Person的对象。鲍勃不是单身人士,因为鲍勃不是唯一的人。但是有几个客户可能同时和鲍勃谈话。在每种情况下,客户端都没有直接引用Bob(谁在不同的地址空间或不同的机器上),而是有一个代理对象。该代理对象是该特定客户端的本地对象。
因此,我们有多个代理对象,每个代理对象具有不同的身份,但每个代理对象代表Bob的状态和行为服务器对象 - 因此共享状态和行为。如果客户端Alice更新Bob的状态(通过调用其代理对象上的方法),则客户端Carol将看到Bob的行为发生变化(当她调用其代理对象上的方法时)。 Alice和Carol的代理对象 not 具有相同的对象标识,但 do 具有相同的状态和行为:两者都代表Bob。这两个代理展示了Monostate模式。
(The whole thread值得一读,以便进行更详细的讨论,但上面对我来说是点击焦点的地方。)