2008-09-16 10 views

답변

5

정말 "깨끗한 구현"이 무슨 뜻인지에 달려 있습니다. 다른 언어에서와 마찬가지로 Perl의 객체 시스템을 다형성과 함께 사용하여이를 수행 할 수 있습니다. 그러나 Perl에는 퍼스트 클래스 함수가 ​​있으므로이 패턴은 일반적으로 명시 적으로 코드화되지 않습니다. Leon Timmermans의 예는 다음과 같습니다.

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

매우 실용적입니다.

그러나 C++에서와 같이 "공식적인"구현을 찾고 있다면 Perl + 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