懒得写说明啊
// abstructfactory.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
using namespace std;
class buttom
{
public:
virtual void doButtom() {};
};
class text
{
};
class UnixButtom:public buttom
{
public:
virtual void doButtom()
{
cout << "unixbuttom" << endl;
}
};
class WinButtom :public buttom
{
public:
virtual void doButtom()
{
cout << "winbuttom" << endl;
}
};
class UnixText : public text
{
public:
virtual void doUnixText()
{
cout << "unixtext" << endl;
}
};
class WinText :public text
{
public:
virtual void doWinText()
{
cout << "wintext" << endl;
}
};
///factory
class OS
{
public:
virtual buttom* getButtom()
{
return new buttom();
}
virtual text* getText()
{
return new text();
}
};
class WinOS :public OS
{
public:
virtual buttom* getButtom()
{
return new WinButtom();
}
virtual text* getText()
{
return new WinText();
}
};
class UnixOS : public OS
{
virtual buttom* getButtom()
{
return new UnixButtom();
}
virtual text* getText()
{
return new UnixText();
}
};
class Computer
{
private:
buttom* m_p2b;
text* m_p2t;
public:
Computer(OS* p2o)
{
m_p2b = p2o->getButtom();
m_p2t = p2o->getText();
}
void todosth()
{
m_p2b->doButtom();
}
};
int main()
{
WinOS* p2winos = new WinOS();
Computer* p2com = new Computer(p2winos);
p2com->todosth();
UnixOS* p2unixos = new UnixOS();
p2com = new Computer(p2unixos);
p2com->todosth();
delete p2winos;
p2winos = NULL;
delete p2com;
p2com = NULL;
delete p2unixos;
p2unixos = NULL;
return 0;
}