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.

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top