1

由于研究原因,我正在搜索 Javadoc 以确定内部“策略模式”的实现。Javadoc我发现 2 个类实际上是从FilterInputStream该类继承的,该类BufferedInputStreamDataInputStream. 继承的类会覆盖类的read()方法FilterInputStream。现在根据“策略模式”,我必须从另一个类中找到一个方法,Javadoc该方法在其主体中read()也被调用。任何人都可以帮助我吗?

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

提前致谢

4

2 回答 2

2

输入流看起来更像是装饰器模式的一个例子,而不是策略。

更好的策略模式示例是ThreadFactoryRejectedExecutionHandlerin的使用ThreadPoolExecutor

编辑:

RejectedExecutionHandler是决定如何ThreadPoolExecutor处理拒绝任务的策略接口。这种策略有几种具体的实现方式(ThreadPoolExecutor.AbortPolicyThreadPoolExecutor.DiscardPolicy等)。ThreadPoolExecutor可以配置为使用其中之一。

因此,它以下列方式对应于这张图片(来自维基百科文章):

  • ThreadPoolExecutor是一个Context
  • RejectedExecutionHandler是一个Strategy接口
  • ThreadPoolExecutor.AbortPolicy,ThreadPoolExecutor.DiscardPolicy是具体策略 ( ConcreteStrategyA, ConcreteStrategyB)
于 2011-03-28T19:52:06.567 回答
0

我想说任何使用 Java 的ServiceLoader方案的东西都在使用策略模式。基本上算法(可能是一大套算法)直到运行时才决定。Service Loader 本身成为一种主策略(也许这不是主题),但任何使用ServiceLoader(例如,CharsetDecoder)的东西都遵循策略模式方法。

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

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

于 2011-03-28T20:31:46.423 回答