Perlでの戦略パターンのクリーンな実装の記述方法を教えてください。 Perlの機能を活用する方法でやりたいPerlでの戦略パターンのクリーンな実装
3
A
答えて
5
本当に「クリーンな実装」ということにかかっています。他の言語と同様に、Perlの多態性を持つオブジェクトシステムを使用して、これを行うことができます。しかし、Perlはファーストクラスの関数を持っているので、このパターンは通常は明示的にはコード化されません。
sort { lc($a) cmp lc($b) } @items
のレオンTimmermans'の例は非常にエレガントにこれを示しています。
しかし、C++のように "正式な"実装を探しているのなら、Perl + Mooseを使ってみるとよいでしょう。これは、Mooseの委任のサポートを使用していることを除いて、Wikipedia -- Strategy patternのC++コードの翻訳です。
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. Goで戦略パターンを実装する方法は?ここで
- 4. Symfony2の戦略パターン
- 5. 戦略パターンのバリエーション
- 6. リファクタリングヘルプ - 戦略パターン
- 7. デザインパターン - 戦略パターン
- 8. コントローラで戦略パターンを実装する方法
- 9. ここに戦略パターンを実装しますか?
- 10. 戦略パターンの助けが
- 11. コンポーネントモデルとゲームデザインの戦略パターン
- 12. 戦略パターンの質問 - PHP
- 13. 戦略パターンと委任パターンの違い
- 14. スプリングで戦略パターンを効率的に実装する方法は?
- 15. Javaアノテーションを使用して '戦略パターン'を実装できますか?
- 16. C#戦略パターン設計の問題
- 17. OOPのデザイン - 作成戦略/パターン
- 18. ユーザーのメンバーにアクセスする戦略パターン
- 19. これは正しい戦略の実装です
- 20. 静的インスタンスは、私は以下のような戦略パターンの実装を持って安全
- 21. RDFセイルの実装のためのゴマの戦略
- 22. 戦略パターンは、これが正しい
- 23. 戦略パターンと依存性注入
- 24. JPA /休止状態:サブタイピング戦略対「パターン」
- 25. ツリーの配列実装のためのJava Link戦略?
- 26. Scott Amblers High-low(オブジェクト識別)戦略の実装とDORM
- 27. サードパーティのライブラリにインターフェイスを実装する戦略?
- 28. Rubyネットを使った再接続戦略の実装
- 29. リカバリモードを実装するための戦略
- 30. Scalaでの戦略