design-patterns - 有人可以向我展示使用方案的策略模式的简单示例吗?

标签 design-patterns scheme strategy-pattern

我是设计模式的新手,我正在尝试学习策略模式。在阅读了此处和 oodesign.com 上的一堆示例后,我对其意图有了相当的了解。然而,我发现的大多数例子都是用 Java、C# 或 C/C++ 编写的;这些语言更有条理,迫使你上课等等。当涉及到像方案这样的动态语言时,我很难想象如何实现这种模式。有人可以给我举个例子吗?

最佳答案

在Scheme 和Racket 中,策略模式是……等待……功能应用。

策略的维基百科页面给出了这个使用它的例子:

//StrategyExample test application

class StrategyExample {

  public static void main(String[] args) {

      Context context;

      // Three contexts following different strategies
      context = new Context(new ConcreteStrategyAdd());
      int resultA = context.executeStrategy(3,4);

      context = new Context(new ConcreteStrategySubtract());
      int resultB = context.executeStrategy(3,4);

      context = new Context(new ConcreteStrategyMultiply());
      int resultC = context.executeStrategy(3,4);
  }
}

在 Scheme 或 Racket 中,您只需将其写为:
(+ 3 4)
(- 3 4)
(* 3 4)

并且,如果您想传递一个应用于一组参数的策略,它可能如下所示:
#lang racket
(define (apply-strategy strategy context)
  (strategy context))

确实,策略模式存在的唯一主要原因是 Java 类型系统的弱点。

关于design-patterns - 有人可以向我展示使用方案的策略模式的简单示例吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6161976/

相关文章:

排序算法 lisp-scheme

design-patterns - 为什么策略设计模式适用于降低代码的圈复杂度?

objective-c - 如何在 Objective-C 中创建策略模式?

c# - 为什么使用 "declaration pattern"声明的变量只能在 if 语句中使用

c# - 使用超时模式锁定

java - 装饰一个继承 protected 可观察对象的类

scheme - 在Scheme (Chez) 中打印哈希表

方案谐波函数

php - 不能从类中调用静态方法作为变量名?

java - 如何为具有不同属性的多个类调用过滤和排序方法?