2011-03-28 77 views
1

由于研究原因,我正在寻找Javadoc以确定“策略模式”内部Javadoc的实施。我发现2类实际上继承了FilterInputStream类,BufferedInputStream类和DataInputStream类。继承的类覆盖FilterInputStream类的read()方法。现在根据“战略模式”我必须从另一个类Javadoc找到一个方法,它的主体read()方法也被调用。任何人都可以帮助我吗?javadoc中的策略模式

P.S如果您在Javadoc内部有任何其他战略模式的实施,请告诉我。

在此先感谢

+0

我已经阅读了几次,但我不确定你的意思是“在javadoc”。您是否正在寻找_produces_ Javadoc程序代码中的策略模式? – Pops 2011-03-28 19:37:56

+0

其实我没有在Java库中寻找战略模式。但是用javadoc更容易识别继承,而不是仅仅打开java src并开始寻找:) – pikk 2011-03-28 19:40:02

+0

我认为@pikk的意思是:在Java平台的Javadoc中。 – 2011-03-28 19:49:50

回答

2

输入流看起来更多的是装饰者模式,而不是战略的一个例子。

策略模式的更好的例子是ThreadFactoryRejectedExecutionHandlerThreadPoolExecutor中的使用。

编辑:

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

所以,它对应于this picture(从wikipedia article)以下列方式:

  • ThreadPoolExecutorContext
  • RejectedExecutionHandlerStrategy接口
  • ThreadPoolExecutor.AbortPolicyThreadPoolExecutor.DiscardPolicy是具体的策略(ConcreteStrategyAConcreteStrategyB
+0

hm但ThreadFactory和RejectedExecutionHandler不会覆盖ThreadPoolexecutor的任何方法 – pikk 2011-03-28 20:15:50

+0

@pikk:已更新。 – axtavt 2011-03-29 07:59:11

0

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

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

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

+0

hm,但是你可以向我解释ServiceLoader如何表述为策略模式? – pikk 2011-03-28 21:45:48