IOC代码实例

下面代码是从实际代码工程中剥离出来的。类似于IOC模式。感觉蛮有用的。设计模式才是王道。

ProcesserFactory.h

#pragma once
#include <map>
#include <string>
#include "ICommand.h"

class Icommand;
#define COMMAND_BEGIN	void ProcesserFactory::addCommand() {
#define COMMAND_END		}
#define COMMAND_ADD( cmdName, cmdClass) { \
	ICommand * pObj = new cmdClass(); \
	std::string str = cmdName; \
	_cmdMap.insert(COMMAND_MAP::value_type(str, pObj)); }

class ProcesserFactory
{
	typedef std::map<std::string,ICommand*> COMMAND_MAP;
public:
	ProcesserFactory(void);
	~ProcesserFactory(void);
public:
	void addCommand();
	ICommand * getCommandProcesser(const char * pCmd);
private:
	
	COMMAND_MAP _cmdMap;
};

ProcesserFactory.cpp

#include "ProcesserFactory.h"

ProcesserFactory::ProcesserFactory(void)
{
}

ProcesserFactory::~ProcesserFactory(void)
{
}

ICommand * ProcesserFactory::getCommandProcesser(const char * pCmd)
{
	ICommand * pProcessor = NULL;
	do {
		COMMAND_MAP::iterator iter;
		iter = _cmdMap.find(pCmd);
		if(iter != _cmdMap.end()) {
			pProcessor = iter->second;
		}
	}while(0);
	return pProcessor;
}

ICommand.h

#pragma once

class ICommand
{
public:
	ICommand(void);
	~ICommand(void);
};

ICommand.cpp

#include "ICommand.h"

ICommand::ICommand(void)
{
}

ICommand::~ICommand(void)
{
}

Command.h

#pragma once
#include "ICommand.h"

#define TRACECOMMAND		"TraceCommand";
#define DEFALUTCOMMAND		"DefaultCommand";
#define CREATENODECOMMAND	"CreateNodeCommand";

class TraceCommand : public ICommand
{
public:
	TraceCommand(void) {}
	~TraceCommand(void){}
};

class DefaultCommand : public ICommand
{
public:
	DefaultCommand(void) {}
	~DefaultCommand(void){}
};

class CreateNodeCommand : public ICommand
{
public:
	CreateNodeCommand(void){}
	~CreateNodeCommand(void){}
};

Commands.cpp

#include "Commands.h"
#include "ProcesserFactory.h"

COMMAND_BEGIN
COMMAND_ADD(TRACECOMMAND,TraceCommand)
COMMAND_ADD(DEFALUTCOMMAND,DefaultCommand)
COMMAND_ADD(CREATENODECOMMAND,CreateNodeCommand)
COMMAND_END

Main.cpp

#include "ICommand.h"
#include "ProcesserFactory.h"
#include <iostream>
int main(int argc, char ** argv)
{
	ProcesserFactory* pf = new ProcesserFactory();
	ICommand * ic = pf->getCommandProcesser("TraceCommand");
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值