#include <iostream> #include <map> #include <string>
using namespace std;
class Page; class Page404;
template<typename T> Page* PageConstructorPtr(const string& m_StatusCode) { return new T(m_StatusCode); }
class Factory { typedef Page*(*PageConstructor)(const string&); map<string, PageConstructor> m_PagesMap; public: Factory() { m_PagesMap["page404"] = &PageConstructorPtr<Page404>; }
Page* CreatePage(const string& StatusCode, const string& Message) { PageConstructor pc = m_PagesMap[StatusCode]; Page* object = pc(Message); return object; } };
class Page { public: virtual string Content() const = 0; };
class Page404 : public Page { const string m_Str; string m_Message; public: Page404(const string& Content):m_Str("404!!"), m_Message(Content){} string Content() const { return m_Str + m_Message; } };
int main() { Factory factory; Page * p404 = factory.CreatePage("page404", "你要找的頁面還沒有出現!!"); cout << p404->Content() << endl; }
|