策略模式

策略模式为了适应不同的需求,只把变化点封装了,这个变化点就是实现不同需求的算法,但是,用户需要知道各种算法的具体情况。就像上面的加班工资,不同的加班情况,有不同的算法。我们不能在程序中将计算工资的算法进行硬编码,而是能自由的变化的。这就是策略模式。
UML图:

使用场景:
1、许多相关的类仅仅是行为有异,“策略”提供了一种用多个行为中的一种来配置一个类的方法。
2、 需要一个算法的不同变体。
3、 一个类定义了多种行为,并且这些行为在类中的操作以多个条件语句的形式出现,将相关的条件分支移入它们各自的strategy类中代替这些条件语句,但是这样又把分支判断放回了客户端,此时一般将策略模式与简单工厂模式相结合,简化客户端的代码复杂度。
C++源码:
//策略模式
#include<iostream>
using namespace std;
typedef enum strategy_type
{
    strategy_A,
    strategy_B
}STRATEGYTYPE;
class strategy
{
    public:
        virtual void show_strategy(){}
        virtual ~strategy(){}
};
class strategyA:public strategy
{
    public:
        void show_strategy(){cout<<"strategy A"<<endl;}
        ~strategyA(){}
};
class strategyB:public strategy
{
    public:
        void show_strategy(){cout<<"strategy B"<<endl;}
        ~strategyB(){}
};
class context
{
    public:
        context(STRATEGYTYPE strategy_type)
        {
            switch(strategy_type)
            {
                case strategy_A:
                    sty = new strategyA();
                    break;
                case strategy_B:
                    sty = new strategyB();
                    break;
                default:
                    break;
            }
        }
    public:
        void get_strategy()
        {
            sty->show_strategy();
        }

        strategy *sty;
};
int main()
{
    strategy *sty;
    context *cnt=new context(strategy_A);
    cnt->get_strategy();
    cnt=new context(strategy_B);
    cnt->get_strategy();
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值