Pulire l'attuazione del modello di strategia in Perl
-
09-06-2019 - |
Domanda
Come faccio a scrivere una buona implementazione del modello di strategia in Perl?Voglio fare in modo che si avvale di Perl per le sue caratteristiche.
Soluzione
In realtà dipende da cosa si intende per "pulire attuazione".Come in qualsiasi altro linguaggio, è possibile utilizzare Perl oggetto di sistema con il polimorfismo per fare questo per voi.Tuttavia, dal momento che il Perl ha una funzionalità di prima classe, questo modello non è normalmente codificati in modo esplicito.Leon Timmermans' esempio di
sort { lc($a) cmp lc($b) } @items
questo dimostra, molto elegantemente.
Tuttavia, se siete alla ricerca di una "formale" attuazione come in C++, ecco quello che potrebbe apparire come l'utilizzo di Perl+Alce.Questa è solo una traduzione del codice C++ da Wikipedia: modello di Strategia, se io sto usando Alce di supporto per la delega.
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();
Altri suggerimenti
Utilizzare i riferimenti e le chiusure.Un buon perlish esempio di questo
sort { lc($a) cmp lc($b) } @items
Questo articolo può essere di qualche utilità.Esso copre un esempio di utilizzo del modello di strategia in Perl. http://www.perl.com/pub/a/2003/08/07/design2.html