Saubere Umsetzung der Strategie Muster in Perl
-
09-06-2019 - |
Frage
Wie kann ich eine saubere Umsetzung der Strategie Muster in Perl schreiben? Ich möchte es in einer Art und Weise zu tun, die Perl-Funktionen nutzt.
Lösung
Es hängt wirklich davon ab, was Sie unter „sauberen Implementierung“. Wie in jeder anderen Sprache, können Sie Perl Objektsystem mit Polymorphismus verwenden, um dies zu tun für Sie. Da jedoch Perl First-Class-Funktionen hat, wird dieses Muster normalerweise nicht explizit codiert. Leon Timmermans Beispiel
sort { lc($a) cmp lc($b) } @items
zeigt dies recht elegant.
Allerdings, wenn Sie sich für eine „formale“ Implementierung suchen, wie Sie in C ++ tun würde, ist hier, wie es mit Perl + Moose . Dies ist nur eine Übersetzung des C ++ Code von Wikipedia - Strategie-Muster , außer ich bin mit Moose Unterstützung für die Delegierung.
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();
Andere Tipps
Verwenden Sie Sub-Referenzen und Verschlüsse. Ein gutes Beispiel hierfür Perlish
sort { lc($a) cmp lc($b) } @items
Dieser Artikel kann von Nutzen sein. Es umfasst ein Beispiel für die Strategie-Muster in Perl. http://www.perl.com/pub/a/ 2003/08/07 / design2.html