1.Flyweight 模式以共享的方式高效的支持大量的细粒度对象,对象分为内部状态、外部状态。将可以被共享的状态作为内部状态存储在对象中,而外部状态在适当的时候作为参数传递给对象。
当以下所有的条件都满足时,可以考虑使用享元模式:
- 一个系统有大量的对象。
- 这些对象耗费大量的内存。
- 这些对象的状态中的大部分都可以外部化。
- 这些对象可以按照内蕴状态分成很多的组,当把外蕴对象从对象中剔除时,每一个组都可以仅用一个对象代替。
- 软件系统不依赖于这些对象的身份,换言之,这些对象可以是不可分辨的。
2.Flyweight模式结构图(不想被共享的对象UnshaerConcreteFlyweight,暂不讨论)
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