#pragma once
#ifndef FLYWEIGHT_H
#define FLYWEIGHT_H
#include
#include
typedef std::string STATE;
class Flyweight
{
public:
virtual ~Flyweight(){}
STATE GetIntrinsicState();
virtual void Operation(STATE& ExtrinsicState) = 0;
protected:
Flyweight(const STATE& state)
:m_State(state)
{
}
private:
STATE m_State;
};
class FlyweightFactory
{
public:
FlyweightFactory(){}
~FlyweightFactory();
Flyweight* GetFlyweight(const STATE& key);
private:
std::list m_listFlyweight;
};
class ConcreateFlyweight : public Flyweight
{
public:
ConcreateFlyweight(const STATE& state)
: Flyweight(state)
{
}
virtual ~ConcreateFlyweight(){}
virtual void Operation(STATE& ExtrinsicState);
};
#endif
#include "StdAfx.h"
#include "flyweight_impl.h"
#include
inline STATE Flyweight::GetIntrinsicState()
{
return m_State;
}
FlyweightFactory::~FlyweightFactory()
{
for (std::list::iterator iter = m_listFlyweight.begin();
iter != m_listFlyweight.end(); ++iter)
{
delete (*iter);
}
m_listFlyweight.clear();
}
Flyweight* FlyweightFactory::GetFlyweight(const STATE& key)
{
for (std::list::iterator iter = m_listFlyweight.begin();
iter != m_listFlyweight.end(); ++iter)
{
if ((*iter)->GetIntrinsicState() == key)
{
std::cout
1659628745
查看更多评论