Perl에서 전략 패턴을 완전히 구현하려면 어떻게해야합니까? Perl의 기능을 활용하는 방식으로하고 싶습니다.Perl의 전략 패턴 구현 완료
3
A
답변
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
3
이 문서가 유용 할 수 있습니다. Perl에서 전략 패턴을 사용하는 예를 다룹니다. http://www.perl.com/pub/a/2003/08/07/design2.html