C++設計モード[20]ポリシーモード

2163 ワード

ポリシー・モードはもちろん、ポリシーについて説明します.状況が発生したら、オブジェクトを作成します.各オブジェクトのメソッド名は同じで、メソッドの実装には大きな違いがあります.このパターンも実は簡単で、見ると使い方がわかります.
Strategy:サポートされているすべてのアルゴリズムの共通インタフェースを定義します.Contextはこのインタフェースを使用して、あるConcreteStrategy定義のアルゴリズムを呼び出す.ConcreteStrategy:Strategyインタフェースを実現する具体的なアルゴリズム;Context:ConcreteStrategyオブジェクトを使用して構成します.Stategyオブジェクトへの参照を維持するとともに、Stategyがデータにアクセスできるようにインタフェースを定義できます.
例:
#include<iostream>
using namespace std;
/*************************************    ****************************************/

  class StrategyBase//        
  {
     public:
         virtual void multiWay_tour()=0;//       (        ),      
  };

/*************************************     ****************************************/

  class StrategyFirstChild:public StrategyBase//    ,                 
  {
     public:
        void multiWay_tour()
        {
           cout<<"I'll go tourism on feet"<<endl;
        }
  };

  class StrategySecondChild:public StrategyBase//    ,                 
  {
     public:
        void multiWay_tour()
        {
           cout<<"I'll go tourism by train"<<endl;
        }
  };

/*************************************   ****************************************/

  class Context //   ,        ,        ----   <    >
  {
     private:
         StrategyBase *strategyChild;

     public:
       Context(StrategyBase *child)
       {
          strategyChild=child;
       }
       void multiWay_tour()
       {
         strategyChild->multiWay_tour();
       }
     
  };

/*************************************   ****************************************/
int main()
{
    cout<<"    "<<endl;

    //“     ”      “   ”   
    Context *Context_A=new Context(new StrategyFirstChild()),
            *Context_B=new Context(new StrategySecondChild()),
            *Context_C=new Context(new StrategySecondChild());

    //    ,   “   ”  ,           
    Context_A->multiWay_tour();
    Context_B->multiWay_tour();
    Context_C->multiWay_tour();

    cout<<endl;
    system("pause");
    return 0;
}