異なる戦略パターン(デザインモデル5)

序文

デザインパターンとは何ですか?これは、ルーチンを意味し、プログラマは古くからまとめています。私たちが日常の多くのことを学んだが、シャシ侯の使用が、の使用が適切である多くの時間が、私はこれが問題の核心だと思います。
ポリシーモードは、コードスタイルを使用することによって非常に簡単であるとのコードスタイルを見て、この時間を使用する際に知っていない使用方法を理解していることもOKです。
戦略モード、なぜそれがポリシーモデルと呼ばれていますか?実際には、戦略のパターンも、異なる国が行う、異なるポリシー、Aを行い、10%の税、20%を取るためにB国に税を取るために古代にポリシー(方針)モードという別名を持っています。
これが起こると、コンピュータは少し戦略パターンと呼ばれるさまざまな国で異なるポリシーに基づいて、対象物に応じて、異なるアプローチをとることです。それ以外の場合には、そのような行為の直接の使用を行う場合には、このようなパターンの形成は、この問題を軽減するので、しかし、その後、それは、あまりにも肥大化し、再利用性が悪いが判明しました。
オブジェクトの動作に属しStrategyパターンは、実際には、概念が適切な行動をするために、実行時に異なるオブジェクトを探すことではない覚えておくことも簡単です。なぜに関しては、タイプに関係なくまたは構造の他の種類の、それはより多くの行動の種類に合わせて、行動やアルゴリズムの種類は、実行時に変更することができますされ、これらの分類は、実際には絶対的な制限はありませんが、当局はそれを計画してきました。
身体を見るので、どのようなスタイルの戦略パターン。

スタート運転

public enum PolicyBase
{
    US_Policy,
    DE_Policy,
    FR_Policy
}
public class Strategy
{
    PolicyBase policyBase;

    public Strategy(PolicyBase policyBase) {
        this.policyBase = policyBase;
    }
    public double CalculatePolicy() {
        if (policyBase == PolicyBase.US_Policy)
        {
            return 0.9;
        }
        else if (policyBase == PolicyBase.DE_Policy)
        {
            return 0.8;
        }
        else if (policyBase == PolicyBase.FR_Policy)
        {
            return 0.1;
        }
        return 0;
    }
}

国によっては、異なるポリシーを採用しました。このようなビューは、異なる国、異なる税法を持っているによると、沙上の問題ああにいないようです。
しかし、その後、将来の展望に大きな問題となっているタイムラインのコードの開発インチ 例えば、英国および(GB)の協力で、私はそれを変更する必要がありますか?彼らは再び来ないようにし、別のと別の国の協力、。
一部の人は不思議今回は、コードを変更したくないのですか?本当にコードを変更する必要はなく、違法なクローズドな開発の原則。


私たちは、コードのダウンを追加していく必要があるどこの赤い部分では、それは、あること、我々は再びそれを変更するために書かれた私たちのいずれかの領域に国を追加する必要があります。
私は、これはあまりにも関与して、非常に悪いと思い、それは全体のサブモジュールのテストを公開する必要がありますが、私はその価格は容認できないと考え、今回戦略パターンが出現しました。

public enum PolicyBase
{
    US_Policy,
    DE_Policy,
    FR_Policy
}
public interface Policy
{
    double Calculate();
}

public class USPolicy : Policy
{
    public double Calculate()
    {
        throw new NotImplementedException();
    }
}

public class DEPolicy : Policy
{
    public double Calculate()
    {
        throw new NotImplementedException();
    }
}

public class FRPolicy : Policy
{
    public double Calculate()
    {
        throw new NotImplementedException();
    }
}

public class StrategyFactory{
    Policy policy;
    public StrategyFactory(PolicyBase policyBase) {
        switch (policyBase)
        {
            case PolicyBase.US_Policy:
                policy = new USPolicy();
                break;
            case PolicyBase.DE_Policy:
                policy = new DEPolicy();
                break;
            case PolicyBase.FR_Policy:
                policy = new FRPolicy();
                break;
        }
    }
    public Policy GetPolicy() {
        return policy;
    }
}

class SalesOrder
{
    private Policy Policy;

    public SalesOrder(StrategyFactory strategyFactory)
    {
        this.Policy = strategyFactory.GetPolicy();
    }

    public double CalculatePolicy()
    {
        double val = Policy.Calculate();
        return val;
    }

};

全国税法の割合の元買収の方針のスルーモード上記のコードは、SalesOrderクラスとなり、このクラスはパラメータが依存します取得する国税法にそれほど依存していること、変更されません安定のクラス。
この時、私はイギリス(GB)を追加する必要がある場合、多くの不思議で、まだ次のように、ああ変更の場所を変更するには、行の赤い部分に必要な


、これは無駄の旅それはない場所で多くの変形例として、また、余分なGBPolicyクラスを追加?
まず、我々は依存関係グラフの前と後を見て:
Strategyパターンを使用する前に:

Strategyパターン使用した後:

このようなAのビューを、どのようなメリットはありませんが、また複雑ではないだけ。
しかし、そのような考えは、私たちはこの問題にこの事業を解決するために税法を扱っている、あなたは確かにすることができるバイナリで再利用することができますが、赤い部分の上に問題を持っている、戦略パターンを使用した後、私は部分的にある赤い線、下に安定していることですあまりにもカップリング。
我々は上記の複雑な部品が実際に簡単なファクトリパターンであることを知って、問題は、我々は赤い線、上記の問題を解決することができれば、簡単な工場出荷時のパターンへの復帰を最適化する方法である。しかし、その後、それが実現可能です。
限られたスペースのため、反射鏡の進化に工場への抽象工場モードの概要。
あなたが他の場合には遭遇して、あなたは、コードの再利用性を追加し、この問題を軽減するために、戦略パターンを使用することができれば、後に他の増える場合には、この時間は、我々は、参照してください。
しかし、それは価値が大きくなく変更、安定した他の場合には、そのような安定している月曜日から日曜日、として、必要とされていない、と安定していました。

uml图

フォローアップに

概要

使用に対処するための行動戦略のモード不安定性の場合のを...他には、複雑で保守が困難もたらしました。

おすすめ

転載: www.cnblogs.com/aoximin/p/12090000.html