Flyweight 设计模式

来源:互联网 发布:网络拓扑结构图软件 编辑:程序博客网 时间:2024/06/06 18:50
#include<iostream>#include<string>#include<vector>using namespace std;class Flyweight{public:virtual ~Flyweight(){};virtual void Operation(const string& extrinsicState) {};string GetintrinsicSate() {return _intrinsicState;};protected:Flyweight(string intrinsicState) { this->_intrinsicState=intrinsicState;};//注意在这里Protectedprivate:string _intrinsicState;};class ConcreteFlyweight: public Flyweight{public:ConcreteFlyweight(string intrinsicSate):Flyweight(intrinsicSate) {};virtual ~ConcreteFlyweight() {};virtual void Operation(const string& extrinsicState){cout<<GetintrinsicSate()<<endl;cout<<extrinsicState<<endl; }};class UnshareConcreteFlyweight: public Flyweight{public:UnshareConcreteFlyweight(string extr):Flyweight(extr){};virtual ~UnshareConcreteFlyweight(){};virtual void Operation(const string& extrinsicState){cout<<extrinsicState<<endl;}};class FlyweightFactory{public:FlyweightFactory(){};~FlyweightFactory(){};Flyweight* GetFactory(string key){vector<Flyweight*>::iterator iter=this->_fly.begin();for(;iter!=this->_fly.end();++iter){if((*iter)->GetintrinsicSate()==key){cout<<"Object have ready"<<endl;return *iter;}}Flyweight* fly=new ConcreteFlyweight(key); // 注意是ConCreteFlyweightthis->_fly.push_back(fly);return fly;}private:vector<Flyweight*> _fly;};int main(int argc, char* argv[]){FlyweightFactory* fc=new FlyweightFactory();Flyweight* ef=fc->GetFactory("Hello");Flyweight* cc=fc->GetFactory("Moargan");Flyweight* cd=fc->GetFactory("Hello");      cd->Operation("job");  Flyweight* fcd=  new UnshareConcreteFlyweight("My English");  fcd->Operation("test");  return 0;}   

0 0
原创粉丝点击