Flyweight模式 享元模式
来源:互联网 发布:windows iso怎么安装 编辑:程序博客网 时间:2024/05/29 17:24
面向对象语言的原则就是一切都是对象,但是如果真正使用起来,有时对象数可能显得很庞大,比如,字处理软件,如果以每个文字都作为一个对象,几千个字,对象数就是几千,无疑耗费内存,那么我们还是要"求同存异",找出这些对象群的共同点,设计一个元类,封装可以被共享的类,另外,还有一些特性是取决于应用(context),是不可共享的,这也是Flyweight中两个重要概念--内部状态intrinsic和外部状态extrinsic之分。
说白点,就是先捏一个的原始模型,然后随着不同场合和环境,再产生各具特征的具体模型,很显然,在这里需要产生不同的新对象,所以Flyweight模式中常出现Factory模式。Flyweight的内部状态是用来共享的,Flyweight factory负责维护一个Flyweight pool(模式池)来存放内部状态的对象。
Flyweight模式是一个提高程序效率和性能的模式,会大大加快程序的运行速度。应用场合很多:比如你要从一个数据库中读取一系列字符串,这些字符串中有许多是重复的,那么我们可以将这些字符串储存在Flyweight池(pool)中。
main::
FlyweightFactory *fc = new FlyweightFactory();
Flyweight *fw1 = fc->GetFlyweight("hello");
Flyweight *fw2 = fc->GetFlyweight("world!");
Flyweight *fw3 = fc->GetFlyweight("hello");
Flyweight池
Flyweight *FlyweightFactory::GetFlyweight(const string &key)
{
vector<Flyweight *>::iterator it = _fly.begin();
for (; it != _fly.end(); it++)
{
if ((*it)->GetIntrinsicState() == key)
{
cout<<"already created by users..."<<endl;
return *it;
}
}
Flyweight *fn = new ConcreteFlyweight(key);
_fly.push_back(fn);
return fn;
}
0 0
- 享元(FlyWeight)模式
- 享元模式Flyweight
- FlyWeight 享元模式
- 享元模式(Flyweight)
- 享元模式 ---flyweight
- 享元模式--Flyweight
- Flyweight 享元模式
- 享元模式(Flyweight),
- 享元模式/Flyweight
- 享元模式flyweight
- 享元模式(Flyweight)
- flyweight 享元模式
- 享元模式-Flyweight
- Flyweight - 享元模式
- 享元模式(flyweight)
- 享元模式 flyweight
- 享元模式(flyweight)
- 享元模式(FlyWeight)
- Java网络编程中socket编程
- matlab中figure指令如果后面加1,2是什么意思,比如figure(1);figure(2)
- Tomcat 配置详解/优化方案
- ZOJ 3772 Calculate the Function(线段树+矩阵)
- 对 tinyhttpd 的理解
- Flyweight模式 享元模式
- Java Graphics2D类的绘图方法
- OpenCV入门 - 提取SIFT关键点
- 从一个简单例子谈谈js的捕获与冒泡问题
- android 集成第三方静态库的编译方法
- libsvm-javaAPI
- 为什么封装的dll看不到注释
- linux获取前一天的日期的脚本
- iOS开发遇到问题汇总(一)