设计模式之策略模式

    技术2022-05-20  29

    策略模式,它定义了一些算法家族,分别封装起来,让他们之间可以相互替换,此模式让算法的变换,不会影响到客户。以下以商场打折为例:

    class CashSuper

    {

         public:

             virtual double acceptCash(double money) = 0;

    };

    class CashNormal : public CashSuper

    {

        public:

            double acceoptCash(double money)

           {

               return money;

            }

    };

    class CashRebate : public CashSuper

    {

         private:

              double moneyRebate = 1.0;

         public:

             double CashRebate(CString moneyRebate)

              {

                moneyRebate = atof(moneyRebate.GetBuffer());

                moneyRebate.ReleaseBuffer();

              }

             double acceptCash(donble money)

             {

                 return money*moneyRebate;

              }

    };

    //以下策略略。。。

    class CashContex

    {

        private:

           CashSuper cash;

         public:

           CashContex(CashSuper super)

           {

                cash = super;

           }

           double GetResult(double money)

            {

               cash.acceptCash(money);

            }

    };

    其实如果光是用策略模式来实现商场打折收费的话,会造成客户端去判断算法,若能把策略模式和简单工厂模式结合起来,则可以减少客户端的代码量,修改CashContext类即可

    class CashContext

    {

         private:

            CashSuper *cs = NULL;

         public:

            CashContext (std::string type)

             {

                switch (type)

                {

                   case "正常收费"

                      CashNormal *cs0 = new CashNormal();

                     cs = cs0;

                      break;

        //         case .....

                }                                      

                }

               double GetResult(double money)

               {

                   return cs->acceptCash(money);

               }

    };

    策略模式是一种定义一系列算法的方法,从概念上来看,所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同方式调用所有的算法,减少了各种算法类与使用算法类之间的耦合。


    最新回复(0)