Question

Comment puis-je écrire une implémentation propre du modèle de stratégie dans Perl? Je souhaite le faire de manière à exploiter les fonctionnalités de Perl.

Était-ce utile?

La solution

Cela dépend vraiment de ce que vous entendez par "mise en œuvre propre". Comme dans tout autre langage, vous pouvez utiliser le système d'objet avec polymorphisme de Perl pour le faire à votre place. Cependant, comme Perl a des fonctions de première classe, ce modèle n’est normalement pas explicitement codé. Exemple de Leon Timmermans de

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

le démontre avec élégance.

Cependant, si vous recherchez un " formel " Comme vous le feriez en C ++, voici à quoi cela pourrait ressembler avec Perl + Moose . Ceci est juste une traduction du code C ++ de Wikipedia - Modèle de stratégie , sauf que j'utilise Soutien de Moose à la délégation.

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();

Autres conseils

Utilisez des sous-références et des fermetures. Un bon exemple de cette perlish

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

Cet article peut être utile. Il couvre un exemple d'utilisation du modèle de stratégie dans Perl. http://www.perl.com/pub/a/ 2003/08/07 / design2.html

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top