由于研究原因,我正在搜索Javadoc以确定Javadoc
内的“策略模式”的实现。我找到了两个实际上继承自FilterInputStream
类,类BufferedInputStream
和DataInputStream
的类。继承的类覆盖read()
类的FilterInputStream
方法。现在根据“策略模式”,我必须从Javadoc
中的另一个类中找到一个方法,在其体中也调用read()
方法。有人可以帮帮我吗?
如果您在Javadoc中有任何其他策略模式实现,请告诉我。
提前致谢
答案 0 :(得分:2)
输入流看起来更像是Decorator模式而不是策略。
战略模式的更好示例是ThreadPoolExecutor
中ThreadFactory
和RejectedExecutionHandler
的使用。
修改强>
RejectedExecutionHandler
是策略的接口,用于确定ThreadPoolExecutor
处理任务拒绝的方式。这些战略有几个具体实施(ThreadPoolExecutor.AbortPolicy
,ThreadPoolExecutor.DiscardPolicy
等)。 ThreadPoolExecutor
可以配置为使用其中之一。
因此,它通过以下方式与this picture(来自wikipedia article)对应:
ThreadPoolExecutor
是Context
RejectedExecutionHandler
是Strategy
界面ThreadPoolExecutor.AbortPolicy
,ThreadPoolExecutor.DiscardPolicy
是具体策略(ConcreteStrategyA
,ConcreteStrategyB
)答案 1 :(得分:0)
我会说使用Java ServiceLoader方案的任何东西都在使用策略模式。基本上算法(可能是它们中的一大套)在运行时之前尚未确定。服务加载器本身成为一种主策略(可能在这里不是主题),但使用ServiceLoader
(例如CharsetDecoder
)的任何内容都遵循策略模式方法。
编辑以添加以回应评论:我对“策略模式”的理解是它是一个父对象,可以在执行时决定特定算法或算法。因此,ServiceLoader本身不是一种策略模式,而是通过采用策略模式的SPI来促进JDK和其他应用程序的许多领域。
但也许我让它太难了。基本上,Collections.sort(List, Comparator)
和任何带有Comparator
构造函数参数的排序集合(例如,new TreeSet(Comparator)
也是示例。为什么?因为,在执行时,任何合适的比较器都可以提交给{ {1}}或构造函数,以便改变行为。通常在策略模式中,可以在执行时选择许多实现 - 例如,可以通过增加/减少排序的电子邮件表日期,主题或来自地址的顺序。每个都有一个关联的sort()
。