#include <iostream>
#include <map>
#include <string>
using namespace std;
class Flyweight
{
public:
Flyweight(const string& strName) : m_strName(strName) {}
virtual void operation(const int& extrinsic) = 0;
protected:
string m_strName;
};
class ConcreteFlyweight : public Flyweight
{
public:
ConcreteFlyweight(const string& strName) : Flyweight(strName) {}
virtual void operation(const int& extrinsic) override
{
cout << m_strName << " concrete flyweight " << extrinsic << endl;
}
};
class UnsharedConcreteFlyweight : public Flyweight
{
public:
UnsharedConcreteFlyweight(const string& strName) : Flyweight(strName) {}
virtual void operation(const int& extrinsic) override
{
cout << m_strName << " unshared concrete flyweight " << extrinsic << endl;
}
};
class FlyweightFactory
{
public:
Flyweight* getFlyweight(const string& strName)
{
if (m_mapFlyweight.find(strName) != m_mapFlyweight.end())
{
return m_mapFlyweight[strName];
}
Flyweight* pobjFlyweight = new ConcreteFlyweight(strName);
m_mapFlyweight.insert(make_pair(strName, pobjFlyweight));
return pobjFlyweight;
}
const int getFlyweightNumber()
{
return m_mapFlyweight.size();
}
private:
map<string, Flyweight*> m_mapFlyweight;
};
int main()
{
FlyweightFactory objFlyweightFactory;
Flyweight* pobjFlyweightOne = objFlyweightFactory.getFlyweight("彳亍");
pobjFlyweightOne->operation(10);
Flyweight* pobjFlyweightTwo = objFlyweightFactory.getFlyweight("彳亍");
pobjFlyweightTwo->operation(20);
return 0;
}
总结:可以用享元模式减少很多组对象,会增加共享对象的复杂度,需要权衡双方的利弊
07-22
07-22
07-22