/*=============Delegate设计模式( A->D->P )=========================
P: Protocal 抽象类(含有纯虚函数声明)
D:Delegate类(抽象类的继承类,将纯虚函数重写、实现)
A:App类(在类中声明成员 Delegate类对象)
App对象 --> Delegate对象 --> 调用Delegate类中的属性(成员变量)和功能(成员函数)
*/
#include<iostream>
using namespace std;
class AppProtocal
{
public:
virtual void CreateInit() const = 0;
};
class AppDelegate : public AppProtocal
{
public:
virtual void CreateInit() const
{
cout << "Start..." << endl;
}
};
class Application
{
public:
void SetDelegate(AppDelegate * appdelegate)
{
m_Delegate = appdelegate;
}
void SetDelegate(AppDelegate appdelegate)
{
m_Delegate2 = appdelegate;
}
void run()
{
m_Delegate->CreateInit();
}
void run2()
{
m_Delegate2.CreateInit();
}
private:
AppDelegate * m_Delegate;
AppDelegate m_Delegate2;
};
int main()
{
Application * app = new Application();
AppDelegate * del = new AppDelegate();
app->SetDelegate(del);
app->run();
Application app2;
AppDelegate del2;
app2.SetDelegate(del2);
app2.run2();
system("pause");
return 0;
}