设计模式---策略模式

又是一个情人节,帅哥们正用各种办法取悦自己的女朋友或者老婆,买花、买包、吃顿烛光晚餐等等,而此刻我对着屏幕,敲击着无趣的26个字母...
想到上面哄女孩子开心的各种形式,突然想到一种设计模式---策略模式。各位帅哥的目的很明确就是让女孩子高兴,那么怎么让他们高兴那?每人选择针对自己适合的方法策略...
策略模式就是很好管理各种方法策略,根据需求灵活替换扩展。比如排序算法,方法有很多种,冒泡、快排、希尔排序等,这些算法都是为了让一组无序数字变为有序,而算法在不同场景下选择不同的算法,这个时候策略模式就能够方便我们解决这个问题。就以情人节哄女孩子开心写一个策略模式...
//策略基类
#pragma once
class CCoaxGirlStrategy
{
public:
    ~CCoaxGirlStrategy();
public:
    virtual void Coax() = 0;
protected:
    CCoaxGirlStrategy();
};
#include "goaxgirlstrategy.h"


CCoaxGirlStrategy::CCoaxGirlStrategy()
{
}


CCoaxGirlStrategy::~CCoaxGirlStrategy()
{
}
//给女朋友买束花
#pragma once
#include "goaxgirlstrategy.h"
class CBuyFlowerStrategy :
    public CCoaxGirlStrategy
{
public:
    CBuyFlowerStrategy();
    ~CBuyFlowerStrategy();
public:
    void Coax();
};
#include "buyflowerstrategy.h"
#include <iostream>

CBuyFlowerStrategy::CBuyFlowerStrategy()
{
}


CBuyFlowerStrategy::~CBuyFlowerStrategy()
{
}

void CBuyFlowerStrategy::Coax()
{
    std::cout << "Buy Flower Coax My GirlFriend" << std::endl;
}
//请女朋友吃个大餐
#pragma once
#include "goaxgirlstrategy.h"
class CEatFoodStrategy :
    public CCoaxGirlStrategy
{
public:
    CEatFoodStrategy();
    ~CEatFoodStrategy();
public:
    void Coax();
};
#include "eatfoodstrategy.h"
#include <iostream>

CEatFoodStrategy::CEatFoodStrategy()
{
}


CEatFoodStrategy::~CEatFoodStrategy()
{
}

void CEatFoodStrategy::Coax()
{
    std::cout << "Eat Food Coax My GirlFriend" << std::endl;
}

//哄女朋友场景
#pragma once
#include "goaxgirlstrategy.h"
class CGoaxGirlContext
{
public:
    CGoaxGirlContext();
    ~CGoaxGirlContext();
    void SetStrategy(CCoaxGirlStrategy* pStrategy);
    void CoaxGirl() const;
private:
    CCoaxGirlStrategy* m_pStrategy;
};
#include "goaxgirlcontext.h"


CGoaxGirlContext::CGoaxGirlContext()
{
    m_pStrategy = 0;
}


CGoaxGirlContext::~CGoaxGirlContext()
{
    if (m_pStrategy)
    {
        delete m_pStrategy;
        m_pStrategy = 0;
    }
}

void CGoaxGirlContext::SetStrategy(CCoaxGirlStrategy* pStrategy)
{
    if (m_pStrategy)
    {
        delete m_pStrategy;
        m_pStrategy = 0;
    }
    m_pStrategy = pStrategy;
}

void CGoaxGirlContext::CoaxGirl() const
{
    if (m_pStrategy)
    {
        m_pStrategy->Coax();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值