大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
动机
在软件系统采用纯粹对象方案的问题在于大量细粒度的对象会很快充斥在系统中,从而带来很高的运行时代价—主要指内存需求方面的代价
如何在避免大量细粒度对象问题的同时,让外部客户仍然能够透明地使用面向对象地方式来进行操作
模式定义
运用共享技术有效地支持大量细粒度地对象。
实例
每一个字符都是一个字体 字体对象Font
class Font{
private:
//unique object key
string key;
//object state
//...
public:
Font(const string &key){
//...
}
}
class FontFactory{
private:
map<string,Font*>fontPool;
public:
Font* GetFont(const string& key){
map<key,Font*>:: iterator iten = fontPool.find(key);
if(item != footPool.end()){
return fontPool[key];
}
else{
Font* font = new Font();
fontPool[key] = font;
return font;
}
}
void clear(){
//..
}
}
结构
要点总结
- 面向对象很好地解决了抽象性地问题。但是作为一个运行在机器中的程序实体,我们需要考虑对象的代价问题。Flyweight主要解决面向对象的代价问题。一般不触及面向对象的抽象性问题。
- flyweight采用对象共享的做法来降低系统中对象的个数,从而降低细粒度对象给系统带来的压力。在具体实现方面,要注意对象状态的处理
- ”对象的数量太大“这一说法没有具体的定义
笔记。
- 用共享的方式公用对象
- 其实这也是共享池的设计方式
- 有很多不同的实现方式
- 字符串常量池就是使用了这种思想
- 只有Flyweight和Singteton模式解决的是性能问题 而不是抽象问题
- 这种模式创建出来的对象一般是只读的 否则共享不成立
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/169038.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...