2

为什么在策略模式中需要上下文类?

例如,我想使用 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

4

2 回答 2

5

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

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

于 2012-09-22T16:09:42.707 回答
1

Context可以解耦clientstrategy
如果没有context,当你想改变strategy' 的界面时,你也必须改变里面的界面client
但是,您可能无权更改,client否则可能会导致合并冲突。
但如果有context,你只需要改变成就,context不需要改变client

于 2019-12-21T04:58:21.427 回答