如何在Perl中編寫乾淨的戰略模式實施?我想以一種利用Perl特性的方式來實現它。在Perl中清晰實施戰略模式
3
A
回答
5
這實際上取決於你的意思是「乾淨的實施」。和其他語言一樣,你可以使用Perl的多態對象系統爲你做這件事。但是,由於Perl具有第一類函數,因此通常不會顯式編碼此模式。萊昂Timmermans的例子
sort { lc($a) cmp lc($b) } @items
演示這相當優雅。但是,如果您正在尋找一種「正式」實現,就像您在C++中所做的一樣,那麼使用Perl + Moose可能會看起來像這樣。這只是從Wikipedia -- Strategy pattern的C++代碼的翻譯,除了我使用Moose的代表團支持。
package StrategyInterface;
use Moose::Role;
requires 'run';
package Context;
use Moose;
has 'strategy' => (
is => 'rw',
isa => 'StrategyInterface',
handles => [ 'run' ],
);
package SomeStrategy;
use Moose;
with 'StrategyInterface';
sub run { warn "applying SomeStrategy!\n"; }
package AnotherStrategy;
use Moose;
with 'StrategyInterface';
sub run { warn "applying AnotherStrategy!\n"; }
###############
package main;
my $contextOne = Context->new(
strategy => SomeStrategy->new()
);
my $contextTwo = Context->new(
strategy => AnotherStrategy->new()
);
$contextOne->run();
$contextTwo->run();
4
使用子引用和閉包。這是一個很好的例子
sort { lc($a) cmp lc($b) } @items
3
本文可能有些用處。它涵蓋了在Perl中使用策略模式的一個例子。 http://www.perl.com/pub/a/2003/08/07/design2.html
相關問題
- 1. 如何實施戰略模式?
- 2. 戰略模式實現
- 3. Coredata:戰略模式實現
- 4. 這是一個戰略模式的實施?
- 5. 爲我的具體問題實施戰略模式
- 6. 實施戰略模式。我每次都必須「新」嗎?
- 7. ColdFusion實施策略模式
- 8. 「現實生活」中的戰略模式
- 9. 戰略模式 - C++
- 10. 你會在這裏實施一個戰略模式嗎?如果是,如何?
- 11. 爲什麼戰略模式被稱爲戰略模式?
- 12. 如何實施策略設計模式?
- 13. 戰列艦卡在戰鬥板實施
- 14. 如何正確實施具有兩個界面的戰略模式?
- 15. 領域模型中的戰略模式
- 16. 目標C - 戰略模式?
- 17. 如何在C++中使用std :: function實現戰略模式
- 18. 如何在Go中實施策略模式?
- 19. 如何在Web MVC框架中正確實施策略模式?
- 20. 戰略與模板
- 21. 戰略來實施「可選」的位置的權限
- 22. 戰略實施與XAML複雜的曲線編輯器/ WPF
- 23. Rails的模型清晰
- 24. ALAsset的低清晰度縮略圖
- 25. 這是一個戰略模式
- 26. 例如,這種戰略模式?
- 27. 什麼是超級戰略模式?
- 28. 戰略模式,這是否正確
- 29. 原則2:頁,塊,戰略模式與相關實體
- 30. vb.net實現不同界面的戰略模式