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.

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top