2011-12-13 36 views
0

我们必须控制一些硬件,由于驱动程序的限制,所有的调用应来自同一个调用者对象,所以我实现为单例模式。是否有可复原的单身设计模式?

驱动程序可能会挂起,在这种情况下,它必须被杀死,应用程序将尝试再次启动它...所以我修改了单身人士为复活能力 - 对不起,我只是创造了这个术语,因为我不知道什么是正确的。
基本上它的生活方式是这样的:
不存在=>单#1 =>挂=>终止=>单#2 ...

在代码审查我的同事说,他以前从来没有见过这样的单,因为他理解一个单身人士是整个应用生命周期中唯一的一个......

有没有这样的“可复活的单身”设计模式?有什么我会意识到的陷阱?

哦,我使用C#,但我想借此更一般的面向对象设计的主题......

回答

2

的Singleton模式并不真正适用在这里,既然你说自己更对象需要被创建。

我会建议你使用类似工厂模式,而不是东西:

  • 调用factory.get()
  • 如果不存在的对象,创建新的对象
  • 如果对象存在且有效,返回它
  • 如果对象存在且挂,杀了它,并创建一个新的对象

你实现一个事实这样一次只能创建一个对象。

+0

听起来像工厂和单身人士的混合体,实际上只使用工厂模式来包装访问单身人士,因为我正在接近。 +1无论如何 – Yuck

+0

@Yuck似乎是这样,我知道,但从概念上说是不同的。 Singleton只允许一个实例,但是这允许多个实例,虽然在不同的时间。 –

+0

嗯,没关系。所以使用术语工厂是很好的,以避免概念上的混乱。好吧,我会这么做:) – athos