android技术Android开发经验谈Android开发

享元模式

2018-04-07  本文已影响29人  YoungerDev

Android进阶之设计模式

享元模式

定义: 使用共享对象有效地支持大量细粒度的对象.

享元模式是池技术的重要实现方式,它可以减少应用程序创建的对象,降低程序内存的占用,提高程序的性能.

使用场景:

  1. 系统中存在大量的相似对象.
  2. 需要缓冲池的场景.

举个例子吧:

//抽象享元角色是一个商品接口,它定义了showGoodsPrice方法来展示商品价格
public interface IGoods {
    public void showGoodsPrice(String name);
}



//定义类Goods 它是吸纳IGoods 接口,并是实现了 showGoodsPrice方法
public class Goods implements IGoods{
    private String name;//名称
    private String version;// 版本

    public Goods(String name) {
        this.name = name;
    }

    @Override
    public void showGoodsPrice(String version) {
        if (version.equals("32G")){
            System.out.println("价格为5199元");
        }else if (version.equals("128G")){
            System.out.println("价格为5999元");
        }
    }
}



//享元工厂
public class GoodsFactory {
    private static Map<String ,Goods> pool = new HashMap<String ,Goods>();
    public static Goods getGoods(String name){
        if (pool.containsKey(name)){
            System.out.println("使用缓存,key为:"+name);
            return pool.get(name);
        }else {
            Goods goods = new Goods(name);
            pool.put(name,goods);
            System.out.println("创建商品,key 为:"+name);
            return goods;
        }
    }
}

Client 使用



    public static void main(String[] args) {
    
        Goods goods1 = GoodsFactory.getGoods("iphone7");
        goods1.showGoodsPrice("32G");

        Goods goods2 = GoodsFactory.getGoods("iphone7");
        goods2.showGoodsPrice("32G");

        Goods goods3 = GoodsFactory.getGoods("iphone7");
        goods3.showGoodsPrice("128G");
    
}

打印出的结果是:


创建商品,key 为:iphone7
价格为5199元
使用缓存,key为:iphone7
价格为5199元
使用缓存,key为:iphone7
价格为5999元

从输出结果可以看出,只有第一次是创建 Goods 对象,后面因为 key 值相同,所以均使用了对象池中的 Goods 对象.

上一篇下一篇

猜你喜欢

热点阅读