zoukankan      html  css  js  c++  java
  • 策略模式

    策略模式是将共同行为(函数)抽象成接口
    这里使用工厂方法创建策略对象使用策略模式
    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;
    }
    
  • 相关阅读:
    PHP 5.5.0 Alpha5 发布
    Ubuntu Touch 只是另一个 Android 皮肤?
    MariaDB 10 已经为动态列提供文档说明
    Percona Toolkit 2.1.9 发布,MySQL 管理工具
    Oracle Linux 6.4 发布
    Ruby 2.0.0 首个稳定版本(p0)发布
    Apache Pig 0.11.0 发布,大规模数据分析
    Node.js 0.8.21 稳定版发布
    红薯 MySQL 5.5 和 5.6 默认参数值的差异
    Django 1.5 正式版发布,支持 Python 3
  • 原文地址:https://www.cnblogs.com/kuikuitage/p/10989797.html
Copyright © 2011-2022 走看看