#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;};//注意在这里Protected
private:
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); // 注意是ConCreteFlyweight
this->_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;
}
Flyweight 设计模式
最新推荐文章于 2022-04-19 10:48:35 发布