文章目录
前言
享元模式比较简单,为了提供对象的复用率,减少创建对象的数量,消耗内存,降低效率。如线程池,数据库连接池等,需要创建连接,直接从连接池中进行获取,能够提高效率。
一、享元模式
享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。
二、使用步骤
1.创建一个存对象的类
/**
* 设置一个患者对象
*/
public class RequestContext extends ThreadLocal{
private static Hashtable props = new Hashtable();
/**
* 设置属性的方法
* @param s
* @param obj
*/
public static void setProperty(String s, Object obj)
{
props.put(s, obj);
}
/**
* 获取属性
* @param s
* @return
*/
public static Object getProperty(String s)
{
return props.get(s);
}
/**
* 移除属性
* @param s
*/
public static void removeProperty(String s)
{
props.remove(s);
}
/**
* 清除所有的属性
*/
public static void clear()
{
props.clear();
}
}
2.存放的对象类
定义一个代理对象,存放在定义存放对象类里边。
/**
* 代理对象
*/
public class ProxyObject {
private String name;
public ProxyObject(String name) {
System.out.print("创建新对象:"+name);
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "ProxyObject{" +
"name='" + name + '\'' +
'}';
}
}
3 测试
/**
* 测试享元模式
*/
public class Client {
public static void main(String[] args) {
Random random = new Random();
//利用
for (int i = 1;i < 10; i++){
int j = random.nextInt(10);
ProxyObject property = (ProxyObject) RequestContext.getProperty(j+"");
if (property==null){
ProxyObject newProxyObject = new ProxyObject(j+"");
//放入hashtable
RequestContext.setProperty(j+"",newProxyObject);
System.out.println(" " +newProxyObject);
}else {
System.out.println("已经存在对象:"+property);
}
}
}
}
打印输出
创建新对象:2 ProxyObject{name='2'}
创建新对象:3 ProxyObject{name='3'}
创建新对象:7 ProxyObject{name='7'}
创建新对象:4 ProxyObject{name='4'}
已经存在对象:ProxyObject{name='4'}
已经存在对象:ProxyObject{name='4'}
已经存在对象:ProxyObject{name='7'}
创建新对象:6 ProxyObject{name='6'}
创建新对象:1 ProxyObject{name='1'}
总结
提供类的复用率,减少对象的创建,应该考虑使用享元模式。