享元模式
【1】什么是享元模式?
享元模式:
【2】享元模式的代码示例:
代码示例1:
1 #include <iostream>
2 #include <string>
3 #include <map>
4 using namespace std;
5
6 class Flyweight
7 {
8 public:
9 virtual void operation(int) = 0;
10 };
11
12 class ConcreteFlyweight : public Flyweight
13 {
14 void operation(int extrinsicState)
15 {
16 cout << "具体FlyWeight: " << extrinsicState << endl;
17 }
18 };
19
20 class UnsharedConcreteFlyweight : public Flyweight
21 {
22 void operation(int extrinsicState)
23 {
24 cout << "不共享的具体FlyWeight: " << extrinsicState << endl;
25 }
26 };
27
28 class FlyweightFactory
29 {
30 private:
31 map<string,Flyweight*> flyweights;
32 public:
33 FlyweightFactory()
34 {
35 flyweights["X"] = new ConcreteFlyweight();
36 flyweights["Y"] = new ConcreteFlyweight();
37 flyweights["Z"] = new UnsharedConcreteFlyweight();
38 }
39 Flyweight *getFlyweight(string key)
40 {
41 return (Flyweight *)flyweights[key];
42 }
43 };
44
45 int main()
46 {
47 int state = 22;
48 FlyweightFactory *f = new FlyweightFactory();
49
50 Flyweight *fx = f->getFlyweight("X");
51 fx->operation(--state);
52
53 Flyweight *fy = f->getFlyweight("Y");
54 fy->operation(--state);
55
56 Flyweight *fz = f->getFlyweight("Z");
57 fz->operation(--state);
58
59 Flyweight *uf = new UnsharedConcreteFlyweight();
60 uf->operation(--state);
61
62 return 0;
63 }
64 //Result:
65 /*
66 具体FlyWeight: 21
67 具体FlyWeight: 20
68 不共享的具体FlyWeight: 19
69 不共享的具体FlyWeight: 18
70 */
代码示例2:
1 #include <iostream>
2 #include <list>
3 #include <string>
4 #include <map>
5 using namespace std;
6
7 class WebSite
8 {
9 public:
10 virtual void use() = 0;
11 };
12
13 class ConcreteWebSite : public WebSite
14 {
15 private:
16 string name;
17 public:
18 ConcreteWebSite(string name)
19 {
20 this->name = name;
21 }
22 void use()
23 {
24 cout << "网站分类: " << name << endl;
25 }
26 };
27
28 class WebSiteFactory
29 {
30 private:
31 map<string,WebSite*> wf;
32 public:
33
34 WebSite *getWebSiteCategory(string key)
35 {
36 if (wf.find(key) == wf.end())
37 {
38 wf[key] = new ConcreteWebSite(key);
39 }
40 return wf[key];
41 }
42
43 int getWebSiteCount()
44 {
45 return wf.size();
46 }
47 };
48
49 int main()
50 {
51 WebSiteFactory *wf = new WebSiteFactory();
52
53 WebSite *fx = wf->getWebSiteCategory("good");
54 fx->use();
55
56 WebSite *fy = wf->getWebSiteCategory("产品展示");
57 fy->use();
58
59 WebSite *fz = wf->getWebSiteCategory("产品展示");
60 fz->use();
61
62
63 WebSite *f1 = wf->getWebSiteCategory("博客");
64 f1->use();
65
66 WebSite *f2 = wf->getWebSiteCategory("微博");
67 f2->use();
68
69 cout << wf->getWebSiteCount() << endl;
70 return 0;
71 }
72 //Result:
73 /*
74 网站分类: good
75 网站分类: 产品展示
76 网站分类: 产品展示
77 网站分类: 博客
78 网站分类: 微博
79 4
80 */
Good Good Study, Day Day Up.
顺序 选择 循环 总结