为什么我们在战略设计模式中需要Context类?

时间:2012-09-22 15:53:55

标签: java design-patterns strategy-pattern

为什么在策略模式中需要Context类?

例如,我想使用zip或rar压缩来压缩文件。我们可以使用具有以下文件的策略模式来解决这个问题。

1.ICompressionStrategy...Its interface
2.ZipCompressionStrategy ..implements IcompressionStrategy
3.RarCompressionStrategy ..implements IcompressionStrategy
4.CompressionContext..Inject IcompressionStrategy
5.Client..Inject CompressionContext

在上面的场景中我们为什么需要CompressionContext类?为什么我不能将IcompressionStrategy注入Client类?

在上面的场景中使用CompressionContext类有什么好处?我可以避免吗?

这是我正在谈论的例子

http://java.dzone.com/articles/design-patterns-strategy

2 个答案:

答案 0 :(得分:2)

策略模式的想法是使用变量策略自定义任务的某些部分。

在上面的示例中,上下文不仅仅是压缩文件列表。例如,它可以是一个迭代文件夹层次结构的类,选择要压缩的文件,将它们放入列表中,使用压缩策略,并将压缩结果写入另一个位置。该算法可以通过提供压缩策略来定制,该策略仅用于整个算法的压缩步骤。

答案 1 :(得分:0)

Context可以将clientstrategy解耦。
如果没有context,则要更改strategy的界面时,也必须在client中更改界面。
但是,您可能无权更改client,否则可能导致合并冲突。
但是,如果存在context,则只需更改context的成就,而无需更改client