享元模式
其他二十三种设计模式
#include<iostream>
#include<map>
using namespace std;
class User {
public:
User(string _name) {
this->name = _name;
}
string GetName() {
return name;
}
private:
string name;
};
class WebSite{
public:
virtual ~WebSite() = default;
virtual void Use(User _user) = 0;
};
class ConcreteWebSite :public WebSite {
public:
ConcreteWebSite(string _name) {
this->name = _name;
}
void Use(User _user) override{
cout << "网站分类: " << name << " 用户: " << _user.GetName() << endl;
}
private:
string name;
};
class WebSiteFactory {
public:
~WebSiteFactory() {
for (auto it = map1.begin(); it != map1.end(); ++it)
delete it->second;
}
WebSite* GetWebSiteCategory(string _key) {
for (auto it = map1.begin(); it != map1.end(); ++it) {
if (it->first == _key)
return it->second;
}
WebSite* website = new ConcreteWebSite(_key);
map1.insert(pair<string, WebSite*>(_key, website));
return website;
}
int GetWebSiteCount() {
return map1.size();
}
private:
map<string, WebSite*> map1;
};
void test1() {
WebSiteFactory factory;
WebSite* fx = factory.GetWebSiteCategory("产品展示");
fx->Use(User("小菜"));
WebSite* fy = factory.GetWebSiteCategory("产品展示");
fy->Use(User("大鸟"));
WebSite* fz = factory.GetWebSiteCategory("产品展示");
fz->Use(User("娇娇"));
WebSite* fl = factory.GetWebSiteCategory("博客");
fl->Use(User("老顽童"));
WebSite* fm = factory.GetWebSiteCategory("博客");
fm->Use(User("桃谷六仙"));
WebSite* fn = factory.GetWebSiteCategory("博客");
fn->Use(User("南海鳄神"));
cout << "网站分类总数: " << factory.GetWebSiteCount() << endl;
}
int main()
{
test1();
system("pause");
return 0;
}