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

4

2 に答える 2

5

戦略パターンの考え方は、可変戦略を使用してタスクの一部をカスタマイズすることです。

上記の例では、コンテキストは単にファイルのリストを圧縮するだけではありません。たとえば、フォルダ階層を反復処理し、圧縮するファイルを選択してリストに入れ、圧縮戦略を使用して、圧縮の結果を別の場所に書き込むクラスの場合があります。このアルゴリズムは、アルゴリズム全体の圧縮ステップにのみ使用される圧縮戦略を提供することでカスタマイズできます。

于 2012-09-22T16:09:42.707 に答える
1

Contextclientとを切り離すことができstrategyます。
がない場合context、のインターフェースを変更したいときはstrategy、のインターフェースも変更する必要がありますclient
ただし、を変更する権限がない場合clientや、マージの競合が発生する場合があります。
ただし、がある場合は、contextの実績を変更するだけで、を変更するcontext必要はありませんclient

于 2019-12-21T04:58:21.427 に答える