c++设计模式之享元模式

来源:互联网 发布:禁用javascript脚本 编辑:程序博客网 时间:2024/05/20 19:28
#include <IOSTREAM>#include <string>#include <VECTOR>using namespace std;class Flyweight{public:virtual void Operation(const string &extrinsicState){};string GetInitrinsicState(){return this->_intrinsicState;};protected:Flyweight(string intrinsicState){this->_intrinsicState = intrinsicState;}private: string _intrinsicState;};class ConcreteFlyweight:public Flyweight{public:ConcreteFlyweight(string intrinsicState):Flyweight(intrinsicState){cout<<"ConcreteFlyweighjt Build....."<<intrinsicState<<endl;}//相关操作void Operation(const string &extrinsicState){cout<<"内部状态:"<<this->GetInitrinsicState()<<"外部状态:"<<extrinsicState<<endl;}};class FlyweightFactory{public:FlyweightFactory(){}Flyweight *GetFlyweight(const string&key){vector<Flyweight*>::iterator it = _fly.begin();for(;it!=_fly.end();it++){//找到了就一起用if((*it)->GetInitrinsicState() == key){cout<<"alreay created by user..."<<endl;return *it;}}Flyweight *fn = new ConcreteFlyweight(key);//没有找到就创建_fly.push_back(fn);return fn;}private:vector<Flyweight*> _fly;};void main(){FlyweightFactory *fc = new FlyweightFactory();//创建工厂Flyweight*fw1 = fc->GetFlyweight("hello");Flyweight*fw2 = fc->GetFlyweight("world!");Flyweight*fw3 = fc->GetFlyweight("hello");//以为hello已经被创建,所以会打印出alreay create by userfw1->Operation("test1");}


 

 

原创粉丝点击