设计模式学习8 -- Flyweight(享元模式)
来源:互联网 发布:云浮市房地产数据 编辑:程序博客网 时间:2024/04/29 18:03
1. Flyweight(享元模式)
1.1. 概述
l 场景:字处理软件,如果以每个文字都作为一个对象,几千个字,对象数就是几千,无疑消耗内存
l 但是我们发现,很多字(内容以及特征)是一样的
l 另一个场景:你要从一个数据库中读取一系列字符串,这些字符串中有许多是重复的。
l 可以将这些字符串存储在池(pool)中。
1.2. 解决方法:使用享元模式
import java.util.*;
class Word{//编写享元类
public String content;
public String key;
public Word(String content,String key){
System.out.println("构造函数");
this.content = content;
this.key = key;
}
}
//管理享元,用池,可以将享元用HashMap存储
class WordPool{
private static HashMap pool = new HashMap();
public static Word getWord(String key,String content){
Word word = (Word)pool.get(key);
if(word==null){
word = new Word(content,key);
pool.put(key,word);
}
return word;
}
}
public class Flyweight1{
public static void main(String args[]){
Word w1 = WordPool.getWord("刘德华","001");
Word w2 = WordPool.getWord("张学友","002");
Word w3 = WordPool.getWord("刘德华","001");
Word w4 = WordPool.getWord("刘德华","001");
}
}
1.3. 享元模式要点
l 编写享元类
l 编写一个工厂,在工厂里面定义hashMap类型的享元池,用get函数进行享元的生成
l 例子:Frame上文本框输入一个字符串,回车,出现以这个字符串为标题的Dialog,但是,当你输入的一个字符串如果是以前出现过的,那么就不要新分配内存。
l 以下是从数据库中读入的XML格式的cd数据,要进行处理,你有何高见?
<?xml version=”1.0”?>
<collection>
<cd>
<title>冰雨</title> <artist>刘德华</artist>
</cd>
<cd>
<title>吻别</title> <artist>张学友</artist>
</cd>
<cd>
<title>忘情水</title> <artist>刘德华</artist>
</cd>
</collection>
1.4. 享元模式小结
l 享元模式的目的:避免大量拥有相同内容的小类的开销(如耗费内存),使大家共享一个类(元类)对象。
l Flyweight模式是一个提高程序效率和性能的模式,会大大加快程序的运行速度。
l 条件:享元多而小,并且会在以后经常使用,但是无法估计使用哪一个。
- 设计模式学习8 -- Flyweight(享元模式)
- 设计模式学习笔记十二(Flyweight享元模式)
- 设计模式(8)--flyweight 享元模式
- 设计模式:享元模式(Flyweight)
- 设计模式:享元模式(Flyweight)
- 设计模式:享元模式(Flyweight)
- 设计模式-享元模式(Flyweight)
- 设计模式-共享模式/享元模式(Flyweight模式)
- JAVA设计模式:享元(Flyweight)
- 设计模式读书笔记:Flyweight(享元)
- c++设计模式----Flyweight(享元)
- Flyweight(享元)设计模式
- 设计模式:Flyweight模式(享元模式)
- 设计模式入门学习 享元(Flyweight)模式
- 设计模式学习笔记--享元(Flyweight)模式
- 设计模式学习笔记——享元(Flyweight)模式
- 设计模式学习—享元模式(Flyweight Design Pattern)
- 设计模式学习笔记之Flyweight模式(享元模式)
- 设计模式学习7 -- Proxy:代理模式
- VC 服务程序编程
- ASP高级技术精选集
- 自定义对话框
- js中的window.open返回object的错误
- 设计模式学习8 -- Flyweight(享元模式)
- asp.net 页面右下角弹出类似QQ或MSN的消息提示
- 一个Linux学习高手写给初学者的话
- webBrowser获取验证码内存图片到picturebox中
- 一段自己不错的Js循环层显示或隐藏代码
- 《十万人家》剧中的经典台词
- 弹出消息框
- 设计模式学习9 -- 观察者模式(Observer)
- 页面分隔栏显示隐藏代码