如何在Perl中编写策略模式的干净实现? 我希望以一种利用Perl功能的方式来实现。

===============>>#1 票数:5 已采纳

这实际上取决于你所说的“干净实施”。 与任何其他语言一样,您可以使用具有多态性的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();

===============>>#2 票数:4

使用子引用和闭包。 这是一个很好的例子

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

===============>>#3 票数:3

这篇文章可能有一些用处。 它涵盖了在Perl中使用策略模式的示例。 http://www.perl.com/pub/a/2003/08/07/design2.html

  ask by sutee translate from so

未解决问题?本站智能推荐:

2回复

如何在Go中实现策略模式?

这是我要解决的一般问题: 一组软件包是从一个源收集数据并将其发送到许多通道。 第二组软件包是从多个渠道收集数据并将其写入一个源。 这套软件包需要转换多种格式的数据。 对于“策略模式”来说,这似乎是一个完美的案例,但是不确定如何最好地在Go中实现该功能。
3回复

Android中的上下文是复杂策略设计模式的实现吗?

我正在阅读有关Strategy模式的几本指南和一本书。 我注意到,在所有指南中都有对Context类的引用,该类倾向于委托而不是实现来决定某些特定行为。 当我每天在android中管理类,对象Context时,我想知道SDK工程师是否将Android Context作为策略模式的具体(复杂
2回复

可以使用Java注释来实现“策略模式”吗?

我想使用“ 策略模式”对第三方类中的成员实施一些定制的格式化行为。 我希望第三方只需注释类成员以指示他们是否应该使用格式策略(A,B或C),然后使用其类的实例调用我的“格式”函数即可。 然后,我的格式功能应该使用注释来标识需要格式化的成员以及要使用哪种格式策略。 在理想的情况下,我希
2回复

MEF中的参数化策略模式

我有三种算法,每种算法采用不同的参数类型来进行练习。 为了在MEF中采用策略模式,我做了以下工作: 并在客户端中: 现在的问题是 ,提供必要的参数作为属性显然是错误的,但是,另一方面,如果我将它们提供为构造函数参数,则会破坏模式的初衷。 你会怎么做 ?
7回复

C#中的策略模式

我一直在经历Head First Design Patterns(最近刚刚进入)并且我正在阅读关于策略模式的内容,我想到它可能是一种很好的方式来实现计算税收等的常用方法。我在工作中使用的特定对象,但我有一个问题。 这就是我的想法: 您可能已经注意到没有FederalTaxRate的
3回复

在策略模式中,策略可以将Context作为参数

反馈摘要 我现在将关闭这个(我想没有更多的反馈)并试着总结一下我的理解 使用“Context”作为我的策略的参数引入了应该避免的紧密耦合,并且还可能迫使我暴露应该保留在类中的属性。 为了最小化耦合,最好提供所需的值或至少使用接口而不是具体类型的策略。 我正在努
3回复

结合Java策略模式中的策略

以下示例无耻地从java.dzone.com中删除 ,并根据我的需要进行了修改: 我们的界面: 我们的第一次实施 第二次实施: 这是给出的用途: 使用Main方法的客户端类 哪个感觉很乱,因为: 我每次都要重置策略 这两种策略可能兼
2回复

策略模式中的字符串到策略

我在AS3中工作,但我想这可能是一个普遍的问题,因此我会更含糊地描述它... 我正在使用XML文件为实现策略模式的特定对象类定义参数。 将有各种各样的对象,这对我们来说是一种设计人员友好的解决方案,用于自定义这些对象。 由于我只能在XML文件中定义字符串,因此有人可以提出一种整洁的方法
1回复

策略模式中的参数不同

有时在使用策略模式时,我发现一些算法实现不需要相同的参数列表。 例如 我应该使用不同的设计模式吗?
2回复

如何在C#中使用泛型实现策略模式

我有一个弦 和通用清单。 我想做两件事: 1.根据名称过滤列表,我这样做是这样的: 2.根据上面的变量“ availableCities”获取字符列表,我这样做是这样的。 当前,这是以一种方法发生的,并且正在起作用。 但是,我试图理解设计模式,并试图实现策