享元模式
来源:互联网 发布:淘宝可以卖电子书吗 编辑:程序博客网 时间: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结束
个人总结
在缓存池的场景使用最多,暂时理解不深,以后继续加深理解。
阅读全文
0 0
- 深入浅出享元模式
- 享元模式
- 享元(FlyWeight)模式
- 享元模式
- 享元模式
- 享元模式
- 享元模式
- 享元模式Flyweight
- 享元模式
- 享元模式
- 享元模式
- FlyWeight 享元模式
- 享元模式(Flyweight)
- 享元模式
- 享元模式
- 享元模式
- 享元模式
- 享元模式 ---flyweight
- 自学总结3
- C++一本通题库1022
- lucene原理及java实现
- dbUtil的更新和查询
- ubuntu移动硬盘挂载
- 享元模式
- C++一本通题库1023
- HashMap底层实现原理
- 数据库连接错误Cannot create PoolableConnectionFactory
- 百度首页图标 缩放+旋转 变形
- iOS内存浅谈
- Java_2017.10.09
- Uncaught Error: Error calling method on NPObject.
- 十图详解tensorflow数据读取机制(附代码)