Perl で戦略パターンのクリーンな実装を作成するにはどうすればよいですか? Perl の機能を活用した方法で行いたいと考えています。
thaiyoshi
質問する
1112 次
2 に答える
5
それは、「クリーンな実装」の意味に大きく依存します。他の言語と同様に、Perl のオブジェクト システムとポリモーフィズムを使用して、これを行うことができます。ただし、Perl にはファースト クラス関数があるため、通常、このパターンは明示的にコーディングされません。Leon Timmermans の例
sort { lc($a) cmp lc($b) } @items
これを非常にエレガントに示しています。
ただし、C++ で行うような「正式な」実装を探している場合は、Perl+ Mooseを使用すると次のようになります。これは、ウィキペディアからの C++ コードの単なる翻訳です-- Strategy pattern。ただし、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();
于 2008-09-17T14:17:36.333 に答える
4
サブ参照とクロージャを使用します。これの良いパーリッシュの例
sort { lc($a) cmp lc($b) } @items
于 2008-09-16T23:21:53.973 に答える