目的:避免大量拥有相同内容的小类的开销(耗费内存),使大家共享一个类(元类)对象。
加快程序运行速度,提高程序效率与性能。
适用场合:有很多可能会重复的小对象(即享元多而小,并且经常会使用,但是无法估计使用哪一个)
说明:下面的例子程序讲的是在字处理应用中使用享元模式
package
com.javaeye.kang.flyweight;
import
java.util.HashMap;
/**
*
享元模式
*
*/
//
编
写享元
类
class
Word {
private
String
key
;
private
String
content
;
public
Word(String key, String content) {
System.
out
.println(
"
构造函数被
调
用
"
);
this
.
key
= key;
this
.
content
= content;
}
}
//
使用池来管理享元,可以将享元用
HashMap
来存
储
class
WordPool {
private
static
HashMap
pool
=
new
HashMap();
public
static
Word getWord(String key, String content) {
//
尝试
通
过
key
从池中拿
对
象
Word word = (Word)
pool
.get(key);
if
(word ==
null
) {
//
现
在池中
还
没有
这
个
对
象,
则
新
规
一个
对
象,放入池中
word =
new
Word(key,content);
pool
.put(key, word);
}
//
将
这
个字
对
象返回
return
word;
}
}
//
客
户
端
public
class
FlyWeightTest {
public
static
void
main(String[] args) {
//
共
5
句,只
执
行
3
次构造函数,前
3
句是向池中放
new
出来的
对
象
//
后
2
句是直接从池中拿出已有的
对
象
Word word1 =
WordPool.getWord
(
"001"
,
"
张
三
"
);
Word word2 =
WordPool.getWord
(
"002"
,
"
李四
"
);
Word word3 =
WordPool.getWord
(
"003"
,
"
王五
"
);
Word word4 =
WordPool.getWord
(
"001"
,
"
张
三
"
);
Word word5 =
WordPool.getWord
(
"002"
,
"
李四
"
);
}
}
|
测试结果:
构造函数被
调
用
构造函数被
调
用
构造函数被
调
用
|
- 描述: 享元模式
- 大小: 90.8 KB
- 描述: 享元模式要点
- 大小: 89 KB
- 描述: 享元模式小结
- 大小: 86.9 KB
分享到:
相关推荐
6共享元模式(Flyweight) 用意:以共享的方式高效地支持大量的细粒度对象
C#面向对象设计模式纵横谈(12):Flyweight 享元模式(结构型模式) (Level 300)
在这里与各位分享本人从网络上下载的C#面向对象设计模式纵横谈系列视频,共有25节,除了第一节需要各位贡献一点资源分以作为对本人上传资源的回馈,后面的其他资源均不需要... 这是第12节:结构型模式Flyweight享元模式
C#面向对象设计模式纵横谈(12):Flyweight 享元模式(结构型模式)
享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。
主要介绍了C++设计模式编程的Flyweight享元模式结构,享元模式在实现过程中主要是要为共享对象提供一个存放的"仓库"(对象池),需要的朋友可以参考下
FlyWeight享元 --- 对象结构型模式
c++设计模式-结构型模式-享元模式;qt工程;c++简单源码; 享元(Flyweight)模式的定义:运用共享技术来有效地支持大量细粒度对象的复用。它通过共享已经存在的对象来大幅度减少需要创建的对象数量、避免大量相似类...
23种设计模式之十(结构型模式)Flyweight模式
二、享元模式结构图 三、享元模式中主要角色 抽象享元(Flyweight)角色:此角色是所有的具体享元类的超类,为这些类规定出需要实现的公共接口。那些需要外蕴状态的操作可以通过调用商业以参数形式传入 具体享元...
设计模式之Flyweight(享元) 行为模式: 设计模式之Template 设计模式之Memento(备忘机制) 设计模式之Observer 设计模式之Chain of Responsibility(职责链) 设计模式之Command 设计模式之State 设计模式之Strategy...
设计模式之Flyweight(享元) 行为模式: 设计模式之Template 设计模式之Memento(备忘机制) 设计模式之Observer 设计模式之Chain of Responsibility(职责链) 设计模式之Command 设计模式之State 设计模式之Strategy...
这是JAVA设计模式中属于结构模式的部分,包括Flyweight(共享模式)、Bridge(桥模式)、Decorator(装饰模式)、Composite(组合模式)、Adapter(适配器模式)、Proxy(代理模式)、Facade (外观模式)的源代码。其中有些模式中...
主要介绍了Java设计模式编程中的Flyweight享元模式的开发结构,享元模式能够最大限度地重用现有的同类对象,需要的朋友可以参考下
结构模式:设计模式之Facade(外观),设计模式之Proxy(代理),设计模式之Adapter(适配器),设计模式之Composite(组合),设计模式之Decorator(油漆工),设计模式之Bridge,设计模式之Flyweight(享元). 行为模式:设计模式之...
享元模式(Flyweight Pattern) 12. 代理模式(Proxy Pattern) 行为型: 13. 模板方法(Template Method) 14. 命令模式(Command Pattern) 15. 迭代器模式(Iterator Pattern) 16. 观察者模式(Observer Pattern) 17. ...
享元模式(Flyweight Pattern) 代理模式(Proxy Pattern) 3. 行为型模式 责任链模式(Chain of Responsibility Pattern) 命令模式(Command Pattern) 解释器模式(Interpreter Pattern) 迭代器模式...
C#面向对象设计模式纵横谈(12):Flyweight 享元模式(结构型模式) C#面向对象设计模式纵横谈(13):Proxy 代理模式(结构型模式) C#面向对象设计模式纵横谈(14):Chain of Responsibility 职责链模式(行为型模式) ...
享元模式(Flyweight Pattern) 12. 代理模式(Proxy Pattern) 13. 模板方法(Template Method) 14. 命令模式(Command Pattern) 15. 迭代器模式(Iterator Pattern) 行为型: 16. 观察者模式(Observer Pattern...