加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

在Perl中清理策略模式的实现

发布时间:2020-12-16 06:07:22 所属栏目:大数据 来源:网络整理
导读:如何在Perl中编写策略模式的干净实现?我希望以一种利用Perl功能的方式来实现. 解决方法 这实际上取决于你所说的“干净实施”.与任何其他语言一样,您可以使用具有多态性的Perl对象系统为您执行此操作.但是,由于Perl具有第一类函数,因此通常不会显式编码此模
如何在Perl中编写策略模式的干净实现?我希望以一种利用Perl功能的方式来实现.

解决方法

这实际上取决于你所说的“干净实施”.与任何其他语言一样,您可以使用具有多态性的Perl对象系统为您执行此操作.但是,由于Perl具有第一类函数,因此通常不会显式编码此模式. Leon Timmermans的榜样

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

非常优雅地展示了这一点.

但是,如果你正在寻找一个“正式”实现,就像在C中那样,这就是使用Perl Moose的样子.这只是从Wikipedia — Strategy pattern开始的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();

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读