Mise en œuvre propre du modèle de stratégie en Perl
-
09-06-2019 - |
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.
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