文档章节

FlyWeight模式

Ne0o0
 Ne0o0
发布于 2017/05/02 15:00
字数 183
阅读 4
收藏 0
//FlyWeight模式 亨元模式
typedef  std::string STATE;
class Flyweight
{
public:
	virtual ~Flyweight(){}
	STATE GetIntrinsicState(){return m_State;}
	virtual void Operation() = 0;

protected:
	Flyweight(const STATE& state):m_State(state){}
protected:
	STATE m_State;
};

class ConcreateFlyweight: public Flyweight
{
public:
	ConcreateFlyweight(const STATE& state): Flyweight(state){}
	~ConcreateFlyweight(){}
	void Operation()
	{
		printf("%s!\n",m_State.c_str());
	}
};

class FlyweightFactory
{
private:
	FlyweightFactory(){}
	~FlyweightFactory();
public:
	static Flyweight* GetFlyweight(const STATE& key);
	static void	ReleaseFlyweight();
private:
	static map<STATE,Flyweight*>  m_mapFlyweight;
};

map<STATE,Flyweight*>  FlyweightFactory::m_mapFlyweight;

void FlyweightFactory::ReleaseFlyweight()
{
	map<STATE,Flyweight*>::iterator it=m_mapFlyweight.begin();
	for (;it!=m_mapFlyweight.end();++it)
	{
		delete(it->second);
	}
	m_mapFlyweight.clear();
}

Flyweight* FlyweightFactory::GetFlyweight(const STATE& key)
{
	map<STATE,Flyweight*>::iterator it;
	it=m_mapFlyweight.find(key);
	if (it!=m_mapFlyweight.end())
	{
		return it->second;
	}
	else
	{
		Flyweight *pFlyweight=new ConcreateFlyweight(key);
		m_mapFlyweight.insert(make_pair(key,pFlyweight));
		return pFlyweight;
	}
}
//FlyWeight模式
int _tmain(int argc, _TCHAR* argv[])
{

	Flyweight* a=FlyweightFactory::GetFlyweight("a");
	a->Operation();
	FlyweightFactory::GetFlyweight("a")->Operation();
	Flyweight* b=FlyweightFactory::GetFlyweight("b");
	b->Operation();
	Flyweight* c=FlyweightFactory::GetFlyweight("c");
	c->Operation();
	Flyweight* d=FlyweightFactory::GetFlyweight("d");
	d->Operation();
	FlyweightFactory::ReleaseFlyweight();
	getchar();
	return 0;
}

© 著作权归作者所有

上一篇: Comnand模式
Ne0o0
粉丝 2
博文 70
码字总数 29011
作品 0
程序员
私信 提问
【白话设计模式二十一】享元模式(Flyweight)

白话设计模式 工厂模式 单例模式 【白话设计模式一】简单工厂模式(Simple Factory) 【白话设计模式二】外观模式(Facade) 【白话设计模式三】适配器模式(Adapter) 【白话设计模式四】单例模式...

陶邦仁
2016/04/13
214
0
设计模式-结构-Flyweight(享元)模式

目的:大粒度对象的共享,优化性能 场景1.游戏中大量同样的怪物,怪物皮肤,模型,名字,等级等数据都是一样的,位置 状态等不一样 Flyweight 有2个状态:内蕴(可共享的)和外蕴(不可共享的...

梦想游戏人
2016/05/02
25
0
常见Java面试题:equals与==

Q1.下面的代码片段的输出是什么? Object s1 = new String("Hello");Object s2 = new String("Hello"); if(s1 == s2) { System.out.println("s1 and s2 are ==");}else if (s1.equals(s2)) ......

BravoZu
2014/02/22
0
0
结构型模式:Flyweight 享元模式

结构型模式:Flyweight 享元模式 1、面向对象的代价 1)面向对象很好地解决了系统抽象性的问题,同时在大多数情况下,也不会损及系统的性能。但是,在某些特殊的应用中,由于对象的数量太大...

flyhighly
2011/04/24
0
0
Java设计模式之-享元模式(Flyweight)

这名字谁起的......简直了...... 说实话,看到这个模式的时候,一头雾水。什么叫享元?什么又叫flyweight?这个名字对理解享元模式起到了极大的反作用。 言归正传,享元,就是共享元数据,而元...

Mock2052
2017/11/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

任正非对华为热点问题的回应亮了,终于知道华为为什么能扛过这一次的冲击!

任正非对华为热点问题的回应亮了,终于知道华为为什么能扛过这一次的冲击! 如果你是华为的老板,看到一条传遍网络的“美国封锁华为”、“华为禁令”的消息,你会怎么办? 昨天上午,华为创始...

forespider
34分钟前
0
0
Java HTTP 组件库选型看这篇就够了

最近项目需要使用 Java 重度调用 HTTP API 接口,于是想着封装一个团队公用的 HTTP client lib. 这个库需要支持以下特性: 连接池管理,包括连接创建和超时、空闲连接数控制、每个 host 的连...

Java面经
35分钟前
1
0
nginx 重启

在 nginx.config 配置目录下 输入命令: nginx -s reload 在 nginx 中,如果我修改了一个配置文件,或者新增了一个配置文件。按照群里网友的描述,我需要关闭 nginx,或者重启 nginx,比较麻...

MrBoyce
36分钟前
0
0
Cesium中级5 - Terrain 地形

Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ CesiumJS支持对与水流相关的海洋、湖泊和河流以及全球高分辨率地形进行流式处理和可视化。查看山峰、山谷...

Cesium中文网
48分钟前
0
0
搭建jupyter+nginx服务

Tips:该文章面向Mac和centos用户,如果是Windows用户,请先安装虚拟机。 概述 Jupyter Notebook(此前被称为 IPython notebook)是一个交互式笔记本,支持运行 40 多种编程语言。 Jupyter ...

阿dai学长
49分钟前
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部