首页 > 代码库 > 设计模式——享元模式(C++实现)
设计模式——享元模式(C++实现)
1 #include <iostream> 2 #include <string> 3 #include <map> 4 #include <vector> 5 #include <iterator> 6 #include <algorithm> 7 8 using namespace std; 9 10 class User11 {12 public:13 User(string strName): m_strName(strName)14 {15 16 }17 18 string GetName() const19 {20 return m_strName;21 }22 23 private:24 string m_strName;25 };26 27 class WebSite28 {29 public:30 virtual void Use(const User* stUser) = 0;31 32 };33 34 class ConcreteWebSite: public WebSite35 {36 public:37 ConcreteWebSite(string strName): m_strName(strName)38 {39 40 }41 42 virtual void Use(const User* stUser)43 {44 cout<< "网站分类:"<< m_strName<< "\t 用户:"<< stUser->GetName()<< endl;45 }46 47 private:48 string m_strName;49 50 };51 52 class WebSiteFactory53 {54 55 public:56 WebSite* GetWebSiteCategory(string strKey)57 {58 if (mapFlyWeights.find(strKey) != mapFlyWeights.end())59 {60 return mapFlyWeights[strKey];61 }62 else63 {64 mapFlyWeights.insert(pair<string, WebSite*>(strKey, new ConcreteWebSite(strKey)));65 return mapFlyWeights[strKey];66 }67 }68 69 private:70 map<string, WebSite*> mapFlyWeights;71 };72 73 int main(int argc, char* argv[])74 {75 WebSiteFactory* f = new WebSiteFactory();76 77 WebSite* fx = f->GetWebSiteCategory("产品展示");78 fx->Use(new User("小菜"));79 80 81 WebSite* fy = f->GetWebSiteCategory("产品展示");82 fy->Use(new User("大鸟"));83 84 85 WebSite* fz = f->GetWebSiteCategory("博客");86 fz->Use(new User("xxxxx"));87 88 89 WebSite* fm = f->GetWebSiteCategory("博客");90 fm->Use(new User("OOOOOO"));91 92 return 0;93 }94 95 [root@ ~/learn_code/design_pattern/22_fly_weight]$ ./flyWeight 96 网站分类:产品展示 用户:小菜97 网站分类:产品展示 用户:大鸟98 网站分类:博客 用户:xxxxx99 网站分类:博客 用户:OOOOOO
设计模式——享元模式(C++实现)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。