Java设计模式-享元模式(Flyweight Pattern)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、享元模式
  • 二、使用步骤
    • 1.创建一个存对象的类
    • 2.存放的对象类
    • 3 测试
  • 总结


前言

享元模式比较简单,为了提供对象的复用率,减少创建对象的数量,消耗内存,降低效率。如线程池,数据库连接池等,需要创建连接,直接从连接池中进行获取,能够提高效率。


一、享元模式

享元模式(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'}

总结

提供类的复用率,减少对象的创建,应该考虑使用享元模式。

你可能感兴趣的:(Java,java,设计模式,享元模式)