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

问题描述 投票:3回答:2

为什么在策略模式中需要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

java design-patterns strategy-pattern
2个回答
2
投票

策略模式的思想是使用可变策略自定义任务的某部分

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


0
投票

Context可以解耦clientstrategy。如果没有context,则要更改strategy的接口时,也必须更改client中的接口。但是,您可能无权更改client,否则可能会导致合并冲突。但是,如果有context,则只需要更改context的成绩即可,而无需更改client

© www.soinside.com 2019 - 2024. All rights reserved.