準備寫一個繪圖軟件,參考了三層架構(表現層、業務邏輯層、數據訪問層)。
//////////////////////////////////////////////////////////////////////////
// 類說明:
// 實體圖元抽象基類,其派生類只存儲數據和進行必要的數據維護,類似於
// 數據類,其他工作例如:繪畫、序列化等由其他類進行處理。
//////////////////////////////////////////////////////////////////////////
class IShape : public IEntity
{
};
//////////////////////////////////////////////////////////////////////////
// 線圖元
//////////////////////////////////////////////////////////////////////////
class CLine : public IShape
{
};
//////////////////////////////////////////////////////////////////////////
// 矩形圖元
//////////////////////////////////////////////////////////////////////////
class CRectangle : public IShape
{
};
//////////////////////////////////////////////////////////////////////////
// 類說明:
// 圖元控制類
// 有很多時候我們會碰到這個問題,燈泡是一個實體類,他自己維護了必要
// 的數據,並提供了一些基本操作,如:開燈/關燈。但是這個燈泡由誰來安裝
// 呢?一般來說是人,人可以做很事情,這樣人就成爲了上帝類,難以維護,
// 所以引進了圖元控制類,用來管理多個對象和處理一些不屬於實體類的操作。
//////////////////////////////////////////////////////////////////////////
class CControlShape
{
};
//////////////////////////////////////////////////////////////////////////
// 類說明:
// 線控制類
//////////////////////////////////////////////////////////////////////////
class CControlLine : public CControlShape
{
};
//////////////////////////////////////////////////////////////////////////
// 類說明:
// 繪圖抽象基類,從實體圖元類對象中獲取數據進行顯示,其他具體繪畫類都
// 有此基類派生
//////////////////////////////////////////////////////////////////////////
class IDrawShape
{
};
//GDI繪畫抽象基類
class IGdiDrawShape : public IDrawShape
{
};
//GDI畫線
class CGdiDrawLine : public IGdiDrawShape
{
};
//GDI畫矩形
class CGdiDrawRectangle : public IGdiDrawShape
{
};
//////////////////////////////////////////////////////////////////////////
// 類說明:
// 實體工廠類,用戶將一個枚舉類型標示(實體類型,存儲與IEntity中,每個
// 實體存儲的值都不一樣),與一個創建函數關聯起來,例如:我們可以通過實體
// 類型,來創建與此想關聯的對象
//////////////////////////////////////////////////////////////////////////
class CEntityFactory
{
};
//暫時擁有兩個實體工廠對象。
//1、用於通過實體類型來創建圖元。
//2、用於通過實體類型來創建相關聯的繪畫對象。
//////////////////////////////////////////////////////////////////////////
// 類說明:
// 管理所有對象的繪畫
// 參數說明:
// T,繪畫基類,不能爲IDrawShape
// DeviceContext,繪畫設備上下文
// 示例:
// CEntityFactory entiryDrawMap;
// CDrawShapeManage<IGdiDrawShape, Gdiplus::Graphics> drawManage;
// Gdiplus::Graphics g;
//
// 註冊實體與繪畫對象之間的映射關係
// RegisterEntityDrawMap<IGdiDrawShape>(&entiryDrawMap);
// 設置實體繪畫映射
// drawManage.SetEntityDrawMap(&entiryDrawMap);
// 創建繪畫對象,並關聯實體(繪畫對象通過實體指針獲取實體數據)
// drawManage.RelationDrawEntity(&controlManage);
// //進行繪畫
// drawManage.Draw(&g);
//////////////////////////////////////////////////////////////////////////
template<typename T, typename DeviceContext>
class CDrawShapeManage
{
}:
//////////////////////////////////////////////////////////////////////////
// tool抽象基類,用來完成特定的鼠標操作。
//////////////////////////////////////////////////////////////////////////
class ITool
{
};
//////////////////////////////////////////////////////////////////////////
// 類說明:
// 選擇工具,選擇對象,使用鼠標操作對象。
//////////////////////////////////////////////////////////////////////////
class CSelectTool : public ITool
{
};
//////////////////////////////////////////////////////////////////////////
// 類說明:
// 添加線工具,使用鼠標添加線。
//////////////////////////////////////////////////////////////////////////
class CAddLineTool : public ITool
{
};