装饰模式的应用之在显示每个Window前追加显示某个logo的功能

//声明文件

//************************************************************************************
//结构型模式:装饰模式
//场景:在显示每个Window前追加显示某个logo的功能。
//************************抽象组件类******************
class CBaseWnd{
public:
	virtual ~CBaseWnd();
	virtual void Show() = 0;//显示
};
//***********************具体组件角色*******************
class CMainWnd : public CBaseWnd{
public:
	~CMainWnd();
	void Show();
};
//*****************************装饰器类**********************
class CWndDecorator : public CBaseWnd{
protected:
	CBaseWnd* pWnd;
public:
	CWndDecorator(CBaseWnd* wnd);
	~CWndDecorator();
	void Show();
};

//具体的装饰器
class CLoginDlg : public CWndDecorator{
public:
	CLoginDlg(CBaseWnd* wnd);
	~CLoginDlg();
	void Show();
};
class CSettingDlg : public CWndDecorator{
public:
	CSettingDlg(CBaseWnd* wnd);
	~CSettingDlg();
	void Show();
};

//实现文件

//************************************************************************************
//结构型模式:装饰模式
//场景:在显示每个Window前追加显示某个logo的功能。
//************************抽象组件类******************
CBaseWnd::~CBaseWnd(){}
//***********************具体组件角色*******************
CMainWnd::~CMainWnd(){ cout << "~MainWnd" << endl;}
void CMainWnd::Show(){cout << "MainWnd" << endl;}
//*****************************装饰器类**********************
CWndDecorator::CWndDecorator(CBaseWnd* wnd) : pWnd(wnd){}
CWndDecorator::~CWndDecorator(){ if(pWnd != NULL)		delete pWnd;}
void CWndDecorator::Show(){ pWnd->Show();}
//具体的装饰器
CLoginDlg::CLoginDlg(CBaseWnd* wnd) : CWndDecorator(wnd){}
CLoginDlg::~CLoginDlg(){cout << "~CLoginDlg" << endl;}
void CLoginDlg::Show(){ cout << "Please input your acc and pwd : " << endl; pWnd->Show();}

CSettingDlg::CSettingDlg(CBaseWnd* wnd) : CWndDecorator(wnd){}
CSettingDlg::~CSettingDlg(){cout << "~CSettingDlg" << endl;}
void CSettingDlg::Show(){ cout << "Thanks for your using. Now begin your setting." << endl; pWnd->Show();}

//测试客户端

void main()
{
	CBaseWnd* pMain = new CMainWnd();
	CBaseWnd* pSettingDlg = new CSettingDlg(pMain);
	CBaseWnd* pLoginDlg = new CLoginDlg(pSettingDlg);

	pLoginDlg->Show();

	delete pLoginDlg;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值