什麼是用於在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