什么是用于在Perl实现Singletons最好的做法?如何在perl中实现单例类?
回答
可以使用Class::Singleton模块。
“Singleton”类也可以使用my
或state
变量(后者自Perl 5.10起可用)轻松实现。但请参阅下面的@ Michael的评论。
package MySingletonClass;
use strict;
use warnings;
use feature 'state';
sub new {
my ($class) = @_;
state $instance;
if (! defined $instance) {
$instance = bless {}, $class;
}
return $instance;
}
如果模块是子类型的,则失败;实例变量需要存在于最终的包中。 Class :: Singleton得到这个权利。 – 2010-02-22 14:11:31
如果它被继承,它并不真正“失败”。继承的类只需像任何其他类一样访问单例对象并与其交互。但是,这一切都取决于你想要做什么。 – 2010-02-22 20:12:43
如果您使用的是驼鹿,那么MooseX::Singleton。它的接口与Class :: Singleton兼容。
辛格尔顿摘要:
- 大部分时间正常对象将正常工作。
- 小心单身。
- 本地化互动尽可能
虽然单身是一个不错的主意,我倾向于只实现一个正常的对象,并使用它。如果至关重要的是我只有一个这样的对象,那么我将修改构造函数以在创建第二个对象时引发致命异常。除了添加依赖关系之外,各种单例模块看起来并没有多大作用。
我这样做是因为它很容易,它的工作原理,当在一些奇怪的将来,我需要在我的应用程序的第二个目的的工作,这些变化被最小化。
我也喜欢本地化的互动与我的“单”的对象 - 保持互动,尽可能少的地方越好。因此,不是每个对象都可以直接访问单例,而是通过我的“应用程序”对象调解所有的交互。只要有可能,应用程序对象从“单例”中获取数据,并将其作为参数传递给其他对象中的方法。来自其他物体的反应也可能被消灭并传递给“单身人士”。当我需要在'singleton'对象中进行更改时,以及当我想在另一个可能不需要的应用程序中重用其他对象或者能够使用原始'singleton'对象时,所有这些工作都会有所帮助。
我想你错过了单身人士的观点。这是一种可以使用的模式,因此您不必执行所有复杂的中介。你不必使用它,但不要因为你不需要它而打折。不是所有的东西都符合你所描述的方案。 – 2010-02-22 20:11:00
- 1. 如何在单例类中实现Map?
- 2. 如何实例化Bill Pugh方法中实现的单例类?
- 3. 如何实现子类单例?
- 4. 在泛型Typescript类中实现单例
- 5. 为Actionscript实现单例类
- 6. 如何在Java中实现抽象单例类?
- 7. 如何创建类的实例并在子类中实现它?
- 8. 如何在PureScript中实现“finally tagless”类型类的Monadic实例?
- 9. MDI单实例C#..如何实现?
- 10. 如何实现“单实例”式设计?
- 11. 如何在Perl中实现RESTful API?
- 12. 如何在perl中实现linux查询?
- 13. 如何在Perl中实现Web服务?
- 14. 如何在Perl中实现Unix grep?
- 15. 在Perl中如何实现Tie :: IxHash?
- 16. 如何在Perl中实现数组?
- 17. 如何在Python中实现Haskell实例?
- 18. 单例实现
- 19. 如何保存单例类的实例
- 20. 如何在类实现中定义实例变量?
- 21. 实现在Perl
- 22. 如何在Perl中实现简单的WHOIS代理?
- 23. 如何在类的实例中声明类的实例?
- 24. 在Perl中的unbless实现?
- 25. 我应该如何访问Perl子类中的实例数据?
- 26. 比例如何在Haskell中实现?
- 27. 在Ruby中实现单例模式
- 28. 在Rails中实现一个单例
- 29. 实现在不同类属实例
- 30. 参数类型在单例实现中不易访问
执行单身人士的最佳做法是**不要** – 2010-02-22 14:39:09
@gbacon - !这将是对实现sigletons的原因(S)?当然,我从来没有广泛使用它们(或者几乎从不使用它们),但我不知道有什么理由避免它们,而不是不一定需要它们。 – DVK 2010-02-22 14:51:04
@DVK一个单身人士是穿着花式西装的全球变数。 – 2010-02-22 15:00:58