享元模式

来源:互联网 发布:淘宝可以卖电子书吗 编辑:程序博客网 时间:2024/05/16 14:44

前言

经历一个国庆假期,感觉全面退化了,继续学习。

享元模式

基本结构

flyweight: 抽象享元对象的接口,包含一些共同的方法

public interface FlyWeight {     void operation(boolean flag);}

concreteflyweight: 具体的享元对象,包含内部状态和外部状态,内部状态用于控制自己的相关操作,外部状态用于提供给调用者识别不同的享对象

public class ConcreteFlyWeight implements FlyWeight {    private boolean mFlag;    private int mCount;    public ConcreteFlyWeight(int count){        mCount=count;    }    @Override    public void operation(boolean flag) {        if(flag){            System.out.println("第"+mCount+"结束");        }else {            System.out.println("第"+mCount+"未结束");        }    }}

flyweightfactory: 持有一个map用来存储创建的享元对象,并且控制享元对象的存取状态。

public class FlyWeightFactory {    private static Map<Integer,FlyWeight> mPool=new HashMap<>();    public static FlyWeight getStatus(int i){        if(mPool.containsKey(i)){            System.out.println("获取到存在的第"+i+"对象");            return mPool.get(i);        }else{            FlyWeight flyWeight=new ConcreteFlyWeight(i);            mPool.put(i,flyWeight);            System.out.println("创建新的第"+i+"对象");            return flyWeight;        }    }}

main方法测试

//享元模式测试方法    private static void testFlyWeight(){        FlyWeight flyWeightOne=new ConcreteFlyWeight(1);        FlyWeightFactory.getStatus(1);        flyWeightOne.operation(true);        FlyWeight flyWeightTwo=new ConcreteFlyWeight(1);        FlyWeightFactory.getStatus(1);        flyWeightTwo.operation(false);        FlyWeight flyWeightThree=new ConcreteFlyWeight(2);        FlyWeightFactory.getStatus(2);        flyWeightThree.operation(true);    }

输出结果

创建新的第1对象第1结束获取到存在的第1对象第1未结束创建新的第2对象第2结束

个人总结

在缓存池的场景使用最多,暂时理解不深,以后继续加深理解。

原创粉丝点击