初学设计模式之享元模式

Posted wuhongjian

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初学设计模式之享元模式相关的知识,希望对你有一定的参考价值。

 1 /*利用享元模式买衬衫的程序案例
 2 需求:1、库存无某种颜色衬衫时,需要对该颜色衬衫进行进货(列表中无该属性的对象时,新建立该属性对象,再调用)
 3       2、库存中有该对象时,直接售卖不用进货(列表中有该属性的对象时,直接调用)
 4 程序注解:库存使用map实现的
 5           售卖等行为是用cout<<相应的话语模拟实现的
 6 */
 7 #include<iostream>
 8 #include<string>
 9 #include<map>
10 using namespace std;
11 
12 //抽象享元类
13 class FlyWeight
14 
15 public:
16     void sail()
17     
18 
19     ;
20 ;
21 
22 //具体的享元类
23 class ConcreteFlyWeight:public FlyWeight
24 
25 public:
26     ConcreteFlyWeight(string color)
27     
28         shirtColor = color;
29         cout<<"新入库衬衫颜色"<<shirtColor<<endl;
30     ;
31     void sail()
32     
33         cout<<"卖掉衬衫颜色为"<<shirtColor<<endl<<endl;
34     ;
35 private:
36     string shirtColor;
37 ;
38 
39 //工厂类
40 class Factory
41 
42 public:
43     ConcreteFlyWeight* factory(string color)
44     
45         
46         map<string, ConcreteFlyWeight*>::iterator iter = SHIRT_MAP.find(color);
47         if (iter!= SHIRT_MAP.end())
48            
49             cout<<"库存有货"<<endl;
50             ConcreteFlyWeight *it = SHIRT_MAP[color];
51             return it;
52         
53         else
54            cout<<"库存无货"<<endl;
55             ConcreteFlyWeight *m_Color=new ConcreteFlyWeight(color);
56             SHIRT_MAP.insert(map<string, ConcreteFlyWeight*>::value_type(color,m_Color));
57             ConcreteFlyWeight *it = SHIRT_MAP[color];
58             return it;
59         
60         
61     
62 private:
63     map<string, ConcreteFlyWeight*>SHIRT_MAP;
64 ;
65 
66 //主函数
67 int main()
68 
69     Factory m_factory;
70 
71     cout<<"1号顾客买红色衬衫"<<endl;
72     ConcreteFlyWeight *m_ConcreteFlyWeight1=m_factory.factory("Red");
73     m_ConcreteFlyWeight1->sail();
74 
75     cout<<"2号顾客买蓝色衬衫"<<endl;
76     ConcreteFlyWeight *m_ConcreteFlyWeight2=m_factory.factory("Blue");
77     m_ConcreteFlyWeight2->sail();
78 
79     cout<<"3号顾客买红色衬衫"<<endl;
80     ConcreteFlyWeight *m_ConcreteFlyWeight3=m_factory.factory("Red");
81     m_ConcreteFlyWeight3->sail();
82 
83     getchar();//停留输出界面,按任意键结束
84     return 0;
85 

 

以上是关于初学设计模式之享元模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式之享元模式(结构型)

Java设计模式之享元模式

设计模式之享元模式与组合模式详解和应用

设计模式之享元模式

设计模式之享元模式

设计模式之享元模式