문제

Perl에서 전략 패턴의 깔끔한 구현을 어떻게 작성합니까?저는 Perl의 기능을 활용하는 방식으로 이를 수행하고 싶습니다.

도움이 되었습니까?

해결책

"깨끗한 구현"이 무엇을 의미하는지에 따라 다릅니다.다른 언어와 마찬가지로 다형성을 갖춘 Perl의 개체 시스템을 사용하여 이 작업을 수행할 수 있습니다.그러나 Perl에는 일급 함수가 있으므로 이 패턴은 일반적으로 명시적으로 코딩되지 않습니다.레온 티머만스(Leon Timmermans)의 예

sort { lc($a) cmp lc($b) } @items

이것을 매우 우아하게 보여줍니다.

그러나 C++에서와 같이 "공식적인" 구현을 찾고 있다면 Perl+를 사용하는 방법은 다음과 같습니다.엘크.이것은 단지 C++ 코드를 번역한 것입니다. Wikipedia - 전략 패턴, 단, 저는 위임을 위해 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();

다른 팁

하위 참조와 클로저를 사용하세요.이에 대한 좋은 펄리쉬 예

sort { lc($a) cmp lc($b) } @items

이 글이 조금이나마 도움이 될 수 있습니다.Perl에서 전략 패턴을 사용하는 예를 다룹니다. http://www.perl.com/pub/a/2003/08/07/design2.html

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top