首页 > 其他 > 详细

策略模式

时间:2019-06-08 09:18:46      阅读:88      评论:0      收藏:0      [点我收藏+]

策略模式是将共同行为(函数)抽象成接口
这里使用工厂方法创建策略对象使用策略模式
strategyFactory.h

#include "strategy.h"

#pragma once

class IStrategyFactory
{
public:
    virtual IStrategy* CreateStrategy() = 0;
    virtual ~IStrategyFactory(){}
};

class CTextStrategyFactory:public IStrategyFactory
{
public:
    IStrategy* CreateStrategy();
    virtual ~CTextStrategyFactory(){}
};

class CPicStrategyFactory:public IStrategyFactory
{
public:
    IStrategy* CreateStrategy();
    virtual ~CPicStrategyFactory(){}
};

strategyFactory.cpp

#include "strategyFactory.h"
#include "strategy.h"

IStrategy* CTextStrategyFactory::CreateStrategy()
{
    return new CTextStrategy();
}

IStrategy* CPicStrategyFactory::CreateStrategy()
{
    return new CPicStrategy();
}

strategy.h

#pragma once

class IStrategy
{
public:
    virtual ~IStrategy(){}
    virtual void Split() = 0;
    
};

class CTextStrategy:public IStrategy
{
public:
    void Split();
    virtual ~CTextStrategy(){}
};

class CPicStrategy:public IStrategy
{
public:
    void Split();
    virtual ~CPicStrategy(){}
};

strategy.cpp

#include <iostream>
#include "strategy.h"

using namespace std;

void CTextStrategy::Split()
{
    cout << "CTextStrategy split" << endl;
}

void CPicStrategy::Split()
{
    cout << "CPicStrategy split" << endl;
}

main.cpp

#include <cstdio>
#include "strategy.h"
#include "strategyFactory.h"

using namespace std;

class CTest
{
public:
    IStrategyFactory* m_PFactory;
    IStrategy* m_Pstrategy;
    ~CTest(){if(NULL != m_Pstrategy)delete m_Pstrategy;}

    CTest(IStrategyFactory* factory):m_PFactory(factory)
    {
        m_Pstrategy = factory->CreateStrategy();
    }
    void split()
    {
        m_Pstrategy->Split();
    }
};

int main()
{
    CTextStrategyFactory TextStrategy;
    CTest test1(&TextStrategy);
    test1.split();

    CPicStrategyFactory PicStrategy;
    CTest test2(&PicStrategy);
    test2.split();

    return 0;
}

策略模式

原文:https://www.cnblogs.com/kuikuitage/p/10989797.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!