博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式(第十二式:享元模式)
阅读量:5064 次
发布时间:2019-06-12

本文共 1087 字,大约阅读时间需要 3 分钟。

概念:

  享元模式:Use sharing to support large numbers of fine-gained object efficiently.使用享元模式可以有效地支持大量的细粒度额对象。这中英文翻译过来的定义,是不是看的一头雾水。简单来说就是结合工厂模式的对象池。看代码,其实倒不是很难。

实现:

  享元对象(接口就定义了一个reader的方法,就不写了)

1 public class Book implements IBook { 2     public Book(String type){ 3         this.type = type; 4     } 5  6     private String type; 7  8     @Override 9     public void reader() {10         System.out.println("我正在读"+type+"书");11     }12 }

    享元对象工厂

1 public class BookFactory { 2     private static Map
pool = new HashMap<>(); 3 4 private BookFactory(){} 5 6 public static Book getBook(String type){ 7 Book book = pool.get(type); 8 if(book ==null){ 9 book = new Book(type);10 pool.put(type,book);11 }12 return book;13 }14 }

分析:
  1.很明显的特征,享元模式几乎和懒汉式单例相同,只是在内部添加了Map容器作为对象池存储对象
  2.享元模式的适用范围,也就是为什么要加一个对象池,主要是用对象被高频率创建,对象生命周期又比较短,垃圾回收器还没来及的回收无用对象,造成无用对象大量占用内存空间,添加对象池的作用就反复使用同一对象。
  3.很明显,享元模式使用的都是同一对象,所以在对享元模式对对象有修改操作时,多线程都有可能会出现问题,关于多线程使用享元模式也是需要注意的。

转载于:https://www.cnblogs.com/ben-mario/p/11133082.html

你可能感兴趣的文章
Unity 3D游戏开发学习路线(方法篇)
查看>>
BZOJ2049[Sdoi2008]Cave 洞穴勘测(LCT模板)
查看>>
vuex插件
查看>>
2011年12月09日
查看>>
[ZJOI2007]棋盘制作 【最大同色矩形】
查看>>
合并单元格
查看>>
swift-初探webView与JS交互
查看>>
IOS-图片操作集合
查看>>
Android bitmap图片处理
查看>>
Android应用程序进程启动过程的源代码分析
查看>>
adb logcat 命令行用法
查看>>
Redis学习手册(Key操作命令)
查看>>
模板统计LA 4670 Dominating Patterns
查看>>
泛型第23条:请不要在新代码中使用原生态类型
查看>>
非对称加密
查看>>
bzoj 3413: 匹配
查看>>
从下周开始就要采用网上记录值班日志了
查看>>
在qq中可以使用添加标签功能
查看>>
eclipse 自定义布局
查看>>
团队项目开发客户端——登录子系统的设计
查看>>