1.Flyweight 模式以共享的方式高效的支持大量的细粒度对象,对象分为内部状态、外部状态。将可以被共享的状态作为内部状态存储在对象中,而外部状态在适当的时候作为参数传递给对象。

当以下所有的条件都满足时,可以考虑使用享元模式:

  • 一个系统有大量的对象。
  • 这些对象耗费大量的内存。
  • 这些对象的状态中的大部分都可以外部化。
  • 这些对象可以按照内蕴状态分成很多的组,当把外蕴对象从对象中剔除时,每一个组都可以仅用一个对象代替。
  • 软件系统不依赖于这些对象的身份,换言之,这些对象可以是不可分辨的。

2.Flyweight模式结构图(不想被共享的对象UnshaerConcreteFlyweight,暂不讨论)

Flyweight Pattern

3.实现

 1 #ifndef _FLYWEIGHT_H_ 
 2 #define _FLYWEIGHT_H_
 3 
 4 #include <string> 
 5 using namespace std;
 6 
 7 class Flyweight 
 8 { 
 9 public:
10     virtual ~Flyweight();
11     virtual void Operation(const string& extrinsicState);
12     string GetIntrinsicState();
13 protected: 
14     Flyweight(string intrinsicState);
15 private: 
16     string _intrinsicState;
17 };
18 
19 class ConcreteFlyweight:public Flyweight 
20 { 
21 public: 
22     ConcreteFlyweight(string intrinsicState);
23     ~ConcreteFlyweight();
24     void Operation(const string& extrinsicState);
25 protected:
26 private: 
27 }; 
28 
29 #endif
Flyweight.h

相关文章: