• 策略模式


    策略模式是将共同行为(函数)抽象成接口
    这里使用工厂方法创建策略对象使用策略模式
    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;
    }
    
  • 相关阅读:
    spring揭秘 读书笔记 六 bean的一生
    分枝限界算法
    libLAS1.8.0 编译和配置(VS2013+Win7 64)(一)
    Unity学习笔记 之 发射小球碰撞物体的代码记录
    hdu1281 棋盘游戏 --- 最大匹配
    javascript设计模式
    3、Android中Activity的跳转
    2.11 确定运行计划
    php扩展之 pdo_mysql.so
    POJ 1061 青蛙的约会(扩展欧几里得)
  • 原文地址:https://www.cnblogs.com/kuikuitage/p/10989797.html
Copyright © 2020-2023  润新知