(11)一步一步开发一个简单CAD之策略模式
2008-09-12 11:19
274 查看
要对模型的操作中,为了实现不现的命令,可以用简单工厂+策略模式,这个也是实现mvc架构的一个重要的设计模式
具体代码如下
class CContext//使用策略模式加简单工厂
{
public:
CContext(){m_pCmd = new CComand(), m_pEx = new CExplan(),m_pMove = new CMove();};//实现即时平移
virtual ~CContext(){ if(m_pCmd) {delete m_pCmd; } if(m_pEx){delete m_pEx;} if(m_pMove) {delete m_pMove;}};
void TypeCmd(int Num);
void OnLButtonDown(UINT nFlags, CPosition pos){m_pCmd->OnLButtonDown(nFlags, pos);};
void OnMouseMove(UINT nFlags, CPosition pos){m_pCmd->OnMouseMove(nFlags, pos),m_pMove->OnMouseMove(nFlags, pos);};
void OnRButtonDown(UINT nFlags, CPosition pos){m_pCmd->OnRButtonDown(nFlags, pos);};
void OnLButtonUp(UINT nFlags, CPosition pos){m_pCmd->OnLButtonUp(nFlags, pos);};
void OnMouseWheel(UINT nFlags, short zDelta, CPosition pos){m_pCmd->OnMouseWheel(nFlags, zDelta, pos), m_pEx->OnMouseWheel(nFlags, zDelta, pos);};
void OnMButtonDown(UINT nFlags, CPosition pos){m_pCmd->OnMButtonDown(nFlags, pos), m_pMove->OnMButtonDown(nFlags, pos);};
void OnMButtonUp(UINT nFlags, CPosition pos){m_pCmd->OnMButtonUp(nFlags, pos), m_pMove->OnMButtonUp(nFlags, pos);};
private:
CComand *m_pCmd;
CComand *m_pEx;//实现即时中键缩放
CComand *m_pMove;//实现即中键平移
};
void CContext::TypeCmd(int Num)
{
if(m_pCmd)
{
delete m_pCmd;
m_pCmd = NULL;
}
switch(Num)
{
case ID_DRAW_LINE :
m_pCmd = new CCreateLine();//改变光标
break;
case ID_DRAW_CIRCLE :
m_pCmd = new CCreateCircle();
break;
case ID_DRAW_RECT :
m_pCmd = new CCreateRect();
break;
case ID_EXPLANSMALL :
m_pCmd = new CExsmall();
break;
case ID_EXPLANLarge :
m_pCmd = new CExlarge();
break;
case ID_TRANSLATE :
m_pCmd = new CBaseMove();//平移命令
break;
case ID_PICK :
m_pCmd = new CSelect();//检选
break;
case ID_UNPICK :
m_pCmd = new CUnSelect();//去掉捡选
break;
case ID_DELETE :
m_pCmd = new CDelete();//删除
break;
case ID_ALLDELETE :
m_pCmd = new CAllDelete();//全删
break;
case ID_MIRROR :
m_pCmd = new CMirror();
break;
case ID_ROTATE :
m_pCmd = new CMirror();
break;
default:
break;
}
}
具体代码如下
class CContext//使用策略模式加简单工厂
{
public:
CContext(){m_pCmd = new CComand(), m_pEx = new CExplan(),m_pMove = new CMove();};//实现即时平移
virtual ~CContext(){ if(m_pCmd) {delete m_pCmd; } if(m_pEx){delete m_pEx;} if(m_pMove) {delete m_pMove;}};
void TypeCmd(int Num);
void OnLButtonDown(UINT nFlags, CPosition pos){m_pCmd->OnLButtonDown(nFlags, pos);};
void OnMouseMove(UINT nFlags, CPosition pos){m_pCmd->OnMouseMove(nFlags, pos),m_pMove->OnMouseMove(nFlags, pos);};
void OnRButtonDown(UINT nFlags, CPosition pos){m_pCmd->OnRButtonDown(nFlags, pos);};
void OnLButtonUp(UINT nFlags, CPosition pos){m_pCmd->OnLButtonUp(nFlags, pos);};
void OnMouseWheel(UINT nFlags, short zDelta, CPosition pos){m_pCmd->OnMouseWheel(nFlags, zDelta, pos), m_pEx->OnMouseWheel(nFlags, zDelta, pos);};
void OnMButtonDown(UINT nFlags, CPosition pos){m_pCmd->OnMButtonDown(nFlags, pos), m_pMove->OnMButtonDown(nFlags, pos);};
void OnMButtonUp(UINT nFlags, CPosition pos){m_pCmd->OnMButtonUp(nFlags, pos), m_pMove->OnMButtonUp(nFlags, pos);};
private:
CComand *m_pCmd;
CComand *m_pEx;//实现即时中键缩放
CComand *m_pMove;//实现即中键平移
};
void CContext::TypeCmd(int Num)
{
if(m_pCmd)
{
delete m_pCmd;
m_pCmd = NULL;
}
switch(Num)
{
case ID_DRAW_LINE :
m_pCmd = new CCreateLine();//改变光标
break;
case ID_DRAW_CIRCLE :
m_pCmd = new CCreateCircle();
break;
case ID_DRAW_RECT :
m_pCmd = new CCreateRect();
break;
case ID_EXPLANSMALL :
m_pCmd = new CExsmall();
break;
case ID_EXPLANLarge :
m_pCmd = new CExlarge();
break;
case ID_TRANSLATE :
m_pCmd = new CBaseMove();//平移命令
break;
case ID_PICK :
m_pCmd = new CSelect();//检选
break;
case ID_UNPICK :
m_pCmd = new CUnSelect();//去掉捡选
break;
case ID_DELETE :
m_pCmd = new CDelete();//删除
break;
case ID_ALLDELETE :
m_pCmd = new CAllDelete();//全删
break;
case ID_MIRROR :
m_pCmd = new CMirror();
break;
case ID_ROTATE :
m_pCmd = new CMirror();
break;
default:
break;
}
}
相关文章推荐
- (12)一步一步开发一个简单CAD之观察者模式
- (2)一步一步开发一个简单CAD之命令集及实体集
- (4)一步一步开发一个简单CAD之画圆和矩形
- (5)一步一步开发一个简单CAD之线,圆及矩形类
- (8)一步一步开发一个简单CAD之全删
- (10)一步一步开发一个简单CAD之捕捉
- (9)一步一步开发一个简单CAD之镱像和平移
- (1)一步一步开发一个简单二维CAD之基本框架
- (6)一步一步开发一个简单CAD之捡选
- (13)一步一步开发一个简单CAD之像皮筋类
- (3)一步一步开发一个简单CAD之画线
- 关于一个简单的策略设计模式的例子
- (7)一步一步开发一个CAD之对实体集及选择集进行删除,捡选
- 从零开始搭建 一个完善的 MVP模式开发框架(一),MVP模式的简单介绍篇
- 一步一步实现一个简单的OS(进入保护模式)
- 做项目的研发模式,即怎么研发一个系统,一步一步怎么做:UP、RUP、迭代式、瀑布式、快速原型、敏捷开发,区别
- 【设计模式】Java服务开发应用策略模式的一个例子
- php抽象类简单实现策略模式
- iOS开发UI篇―事件处理(实现一个简单的涂鸦板)
- os开发UI篇—使用纯代码自定义UItableviewcell实现一个简单的微博界面布局