如何在Perl中编写策略模式的干净实现?我希望以一种利用Perl功能的方式来实现.
这实际上取决于你所说的"干净实施".与任何其他语言一样,您可以使用具有多态性的Perl对象系统为您执行此操作.但是,由于Perl具有第一类函数,因此通常不会显式编码此模式.Leon Timmermans的榜样
sort { lc($a) cmp lc($b) } @items
非常优雅地展示了这一点.
但是,如果你正在寻找像C++那样的"正式"实现,那么使用Perl + Moose可能就像是这样.这只是来自维基百科 - 战略模式的C++代码的翻译,除了我使用Moose对委托的支持.
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();