javadoc中的策略模式

时间:2011-03-28 19:30:14

标签: java design-patterns strategy-pattern

由于研究原因,我正在搜索Javadoc以确定Javadoc内的“策略模式”的实现。我找到了两个实际上继承自FilterInputStream类,类BufferedInputStreamDataInputStream的类。继承的类覆盖read()类的FilterInputStream方法。现在根据“策略模式”,我必须从Javadoc中的另一个类中找到一个方法,在其体中也调用read()方法。有人可以帮帮我吗?

如果您在Javadoc中有任何其他策略模式实现,请告诉我。

提前致谢

2 个答案:

答案 0 :(得分:2)

输入流看起来更像是Decorator模式而不是策略。

战略模式的更好示例是ThreadPoolExecutorThreadFactoryRejectedExecutionHandler的使用。

修改

RejectedExecutionHandler是策略的接口,用于确定ThreadPoolExecutor处理任务拒绝的方式。这些战略有几个具体实施(ThreadPoolExecutor.AbortPolicyThreadPoolExecutor.DiscardPolicy等)。 ThreadPoolExecutor可以配置为使用其中之一。

因此,它通过以下方式与this picture(来自wikipedia article)对应:

  • ThreadPoolExecutorContext
  • RejectedExecutionHandlerStrategy界面
  • ThreadPoolExecutor.AbortPolicyThreadPoolExecutor.DiscardPolicy是具体策略(ConcreteStrategyAConcreteStrategyB

答案 1 :(得分:0)

我会说使用Java ServiceLoader方案的任何东西都在使用策略模式。基本上算法(可能是它们中的一大套)在运行时之前尚未确定。服务加载器本身成为一种主策略(可能在这里不是主题),但使用ServiceLoader(例如CharsetDecoder)的任何内容都遵循策略模式方法。

编辑以添加以回应评论:我对“策略模式”的理解是它是一个父对象,可以在执行时决定特定算法或算法。因此,ServiceLoader本身不是一种策略模式,而是通过采用策略模式的SPI来促进JDK和其他应用程序的许多领域。

但也许我让它太难了。基本上,Collections.sort(List, Comparator)和任何带有Comparator构造函数参数的排序集合(例如,new TreeSet(Comparator)也是示例。为什么?因为,在执行时,任何合适的比较器都可以提交给{ {1}}或构造函数,以便改变行为。通常在策略模式中,可以在执行时选择许多实现 - 例如,可以通过增加/减少排序的电子邮件表日期,主题或来自地址的顺序。每个都有一个关联的sort()