设计模式-策略模式

策略模式主要用来使用一系列的算法,或者对一个问题不同实现方式的情况。他方便使用和扩展,统一使用一个接口。
在这里插入图片描述

Strategy:方法基类,具体算法主要由其子类去实现
StrategyOne,StratgyTwo:具体方法类,主要实现了DoSomething()方法。
Client: 控制类,主要用来执行算法。
下面是使用场景:
小明要去北京,有坐飞机和做高铁两种选择。
代码

class Strategy
{
    virtual void DoSomething() = 0;
    virtual ~Strategy();
};

class StrategyOne : public  Strategy
{
    void DoSomething()
    {
	std::cout<<"坐飞机去北京!!!"<<std::endl;
    }	
};

class StrategyTwo : public  Strategy
{
    void DoSomething()
    {
	std::cout<<"坐火车去北京!!!"<<std::endl;
    }	
};

class Client
{
    private:
	shared_ptr<Strategy> m_pstrategy;
	public:
	    Client(shared_ptr<Strategy> pStrategy)
	    {
		this->m_pstrategy = pStrategy;
	    }
	    void ExecStrategy()
	    {
		m_pstrategy.get()->DoSomething();
	    }
}

测试代码

int main()
{
    std::shared_ptr<Client> pClientTwo = std::make_shared<Client>(std::make_shared<StrategyTwo>());
    pClientTwo.get()->ExecStrategy(); 
    std::shared_ptr<Client> pClientOne = std::make_shared<Client>(std::make_shared<pClientOne>());
    pClientOne.get()->ExecStrategy();	
}

该模式下如果在需要增加一种方式去北京比如自驾, 只需要继承Strategy,重写一个方法即可,调用方式不变。程序容易理解且容易扩展。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值