C/C++ 如何设计框架
关于软件设计框架的一点个人心得,之前造了一些轮子,发现修修改改,始终没有造的很好!架构能力不行啊!结果还是没有深入理解MVC,MVP,MVVM等的一些概念,后来我发现这些概念真tm让你晕,我去tm的mvvm,这一切的一切不就是为了解耦啊,经过深思再深思,我终于写出如下逻辑,一直对设计框架有点着迷,毕竟能设计出好的框架定是有足够多的开发经验,如何达到解耦性高!
1,这种适合在各窗口进入聚合的时候采用!
2,在创建控件的时候不必采用这种方式,除非该控件有相当足够的逻辑写!
总要展示一波代码表示表示
//
class BaseObject
{
public:
BaseObject(BaseObject*pParent)
{
AddObserver(this);
}
virtual ~BaseObject()
{
for(auto item : m_lstObserver)
{
item->RemoveObserver(this);
}
}
void AddObserver(BaseObject *pObj)
{
m_lstObserver.push_back(pObj);
}
void RemoveObserver(BaseObject *pObj)
{
auto item = m_lstObserver.begin();
for(item ; item!=m_lstObserver.end() ; ++item)
{
if(*item == pObj)
{
break;
}
}
}
void NotifyStateChange(int state,long long lparam = 0,void *pParam = nullptr)
{
for(auto item : m_lstObserver)
{
item->OnActionStateChange(this,state,lparam,pParam);
}
}
virtual void OnActionStateChange(BaseObject * pObjSrc,int state,long long lparam = 0,void *pParam = nullptr)
{
}
virtual void OnDataChange()
{
}
std::list<BaseObject*> m_lstObserver; //observer list
virtual void Update(){};
};
class BaseUI : public BaseObject
{
public:
BaseUI(BaseObject *pParent)
:BaseObject(pParent)
{
}
};
//这上面是基类
///
//we write our code here below!
//UIController中我们只要调Notify--什么的,就直接把理解好的数据,发送UI窗口,交付上层显示
class UI;
class UIController
{
public:
UIController(UI*pView)
{
m_pView = pView;
}
void SendEmoji()
{
/* no we send to socket !*/
}
virtual void OnRecv(char *pData)
{
//在这里判断!,如果发送表情成功
//m_pView->NotifyStateChange(param,param,param);
}
UI *m_pView;
};
class UI : public BaseUI
{
public:
UI(BaseUI *pParent)
:BaseUI(pParent)
,m_ctl(this)
{
}
~UI()
{
}
void OnClicked()
{
m_ctl.SendEmoji();
}
virtual void OnActionStateChange(BaseObject * pObjSrc,int state,long long lparam,void *pParam) override
{
/*if(pObjSrc == this)
{
if(lparam)
{
m_emojiUI.show(pParam);
}
}*/
}
UIController m_ctl;
};
int _tmain(int argc, _TCHAR* argv[])
{
UI ui(nullptr);
UI ui2(nullptr);
ui2.AddObserver(&ui);//ui来观察ui2,ui2的事件都会发一份给ui
return 0;
}
更多文章:http://blog.csdn.net/what951006?viewmode=contents
powered by: 小乌龟在大乌龟背上~
版权声明:本文为what951006原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。