Perl에서 전략 패턴을 깔끔하게 구현
-
09-06-2019 - |
문제
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
제휴하지 않습니다 StackOverflow