1. /**
  2. * 字母
  3. * @author stone
  4. *
  5. */
  6. public class Letter {
  7.  
  8. private String name;
  9.  
  10. public Letter(String name) {
  11. this.name = name;
  12. }
  13.  
  14. public String getName() {
  15. return name;
  16. }
  17. }
  1. /**
  2. * 一个产生字母对象的 享元工厂(单例工厂)
  3. * @author stone
  4. *
  5. */
  6. public class LetterFactory {
  7. private Map<String, Letter> map;
  8. private static LetterFactory instance = new LetterFactory();
  9.  
  10. private LetterFactory() {
  11. map = new HashMap<String, Letter>();
  12. }
  13.  
  14. public static LetterFactory getInstance() {
  15. return instance;
  16. }
  17.  
  18. public void add(Letter letter) {
  19. if (letter != null && !map.containsKey(letter.getName())) {
  20. map.put(letter.getName(), letter);
  21. }
  22. System.out.println("map.size====" + map.size());
  23. }
  24.  
  25. public Letter get(String name) {
  26. return map.get(name);
  27. }
  28.  
  29. }
  1. /*
  2. * 享元(Flyweight)模式 结构型模式 主要目的是实现对象的共享
  3. * 字面上看就是 一个 共享元件的模式,这里是将 一些在系统中须要反复使用的对象。共享成单个元件
  4. *
  5. * 像JDBC数据库连接池、线程池等 都是应用了享元模式
  6. * 数据库连接池: 创建了一定数量的连接。存入池中。用到时取出。释放时再存入
  7. * 池程池:相似,也是 用到时取出,释放时再存入
  8. * 所以一般 都会有一个集合来存储元件。有一个享元工厂进行元件的管理。
  9.  
  10. */
  11. public class Test {
  12. public static void main(String[] args) {
  13. LetterFactory factory = LetterFactory.getInstance();
  14. String word = "easiness";
  15. addLetterByName(factory, word);
  16.  
  17. getLetter(factory, word);
  18. }
  19. //加入字母对象
  20. static void addLetterByName(LetterFactory factory, String word) {
  21. for (char c : word.toCharArray()) {
  22. factory.add(new Letter(c + ""));
  23. }
  24. }
  25. //输出字母对象
  26. static void getLetter(LetterFactory factory, String word) {
  27. for (char c : word.toCharArray()) {
  28. System.out.println(factory.get(c + ""));
  29. }
  30. }
  31. }

打印

  1. map.size====1
  2. map.size====2
  3. map.size====2
  4. map.size====3
  5. map.size====4
  6. map.size====5
  7. map.size====5
  8. flyweight.Letter@3343c8b3
  9. flyweight.Letter@272d7a10
  10. flyweight.Letter@3343c8b3
  11. flyweight.Letter@1aa8c488
  12. flyweight.Letter@3dfeca64
  13. flyweight.Letter@22998b08
  14. flyweight.Letter@1aa8c488

Java 实现享元(Flyweight)模式的更多相关文章

  1. 十二、享元(Flyweight)模式--结构模式(Structural Pattern)

    Flyweight在拳击比赛中指最轻量级,即"蝇量级",有些作者翻译为"羽量级".这里使用"享元 模式"更能反映模式的用意. 享元模式以共享 ...

  2. python 设计模式之享元(Flyweight)模式

    #写在前面 这个设计模式理解起来很容易.百度百科上说的有点绕口. #享元模式的定义 运用共享技术来有効地支持大量细粒度对象的复用. 它通过共享已经存在的对橡大幅度减少需要创建的对象数量.避免大量相似类 ...

  3. 十一、结构模式之享元(Flyweight)模式

    什么是享元模式 享元模式是对象的结构模式,是运用共享技术来有效的支持大量细粒度的对象.享元对象能做到共享的关键是区分内蕴状态和外蕴状态.一个内蕴状态是存储在享元对象内部,并且是不会随环境改变而有所不同 ...

  4. 享元(FlyWeight)模式

    享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能.这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式.享元模式尝试 ...

  5. 设计模式C++描述----12.享元(Flyweight)模式

    一. 概述 在面向对象系统的设计何实现中,创建对象是最为常见的操作. 这里面就有一个问题:如果一个应用程序使用了太多的对象,就会造成很大的存储开销.特别是对于大量轻量级(细粒度)的对象,比如在文档编辑 ...

  6. 【设计模式】Java设计模式 - 享元模式

    Java设计模式 - 享元模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 原创作品,更多关注我CSDN: 一个有梦有戏的人 准备将博客园.CSDN一起记录分享自己 ...

  7. Java设计模式-享元模式(Flyweight)

    享元模式的主要目的是实现对象的共享,即共享池,当系统中对象多的时候可以减少内存的开销,通常与工厂模式一起使用. FlyWeightFactory负责创建和管理享元单元,当一个客户端请求时,工厂需要检查 ...

  8. JAVA 设计模式 享元模式

    用途 享元模式 (Flyweight) 运用共享技术有效地支持大量细粒度的对象. 享元模式是一种结构型模式. 结构

  9. Java设计模式—享元模式

    享元模式:是池技术的重要实现方式. 定义如下: 使用共享对象可有效地支持大量的细粒度的对象. 个人理解:享元模式利用共享对象的技术,解决了Java中内存溢出的问题. 享元模式的定义为我们提出了两个要求 ...

随机推荐

  1. Linux相关问题-CentOS6.5 x64版本号下Tomcat无法自启动的解决的方法

    前段时间使用阿里云server.使用的是Linux CentOS6.5系统,在搭建完Tomcat后发现,Tomcat无法自启动. 将启动tomcat的命令为tomcat_home/bin/startu ...

  2. 3.5 用NPOI操作EXCEL--巧妙使用Excel Chart

    在NPOI中,本身并不支持Chart等高级对象的创建,但通过l模板的方式可以巧妙地利用Excel强大的透视和图表功能,请看以下例子. 首先建立模板文件,定义两列以及指向此区域的名称“sales”: 创 ...

  3. BZOJ 1677: [Usaco2005 Jan]Sumsets 求和( dp )

    完全背包.. --------------------------------------------------------------------------------------- #incl ...

  4. Debian(Linux)系统目录简单说明

    bin:基础命令执行档 boot:引导装置器的静态链接文件 dev:设备档 etc:主机特定的系统配置 lib:基本共享库及基本内核模块 mnt:用于临时挂载一个文件系统 proc:系统信息的虚拟目录 ...

  5. unity之uv贴图画圆弧,圆弧面,不规则图形

    由于最近一直没有时间,所以这篇博客一直没发,下面我说说uv画圆弧,圆面,不规则面拼接. 先来两张效果图 图截的不咋滴,凑合着看吧,画圆弧主要用的贝塞尔曲线画的,我感觉这个比较简单,当然大家也可以使用圆 ...

  6. U-Boot在FL2440上移植(四)----支持网卡DM9000和烧写yaffs文件系统

    <一>支持网卡芯片DM9000 在driver下,有网卡驱动DM9000x.c 和 DM9000x.h DM9000接在BANK4,位宽16 在include/configs/TX2440 ...

  7. 转:从pickle看python类成员的动态加载和类的定位

      pickle是Python轻便的对象序列化工具.使用pickle可以方便地把python对象写入文件对象中,或者像soap那样在socket间传送.     按照python的一贯作风,类的成员在 ...

  8. Android Camera调用过程分析

    源代码版本:allwinner 4.0.4 frameworks代码: frameworks/base/core/java/android/hardware/Camera.java JNI层代码: f ...

  9. 基于visual Studio2013解决C语言竞赛题之0409 100以内素数

       题目 解决代码及点评 在已经知道素数是怎么判断的基础上,增加循环,可以判断出100以内的素数 /******************************************* ...

  10. poj 1442 Black Box(优先队列&Treap)

    题目链接:http://poj.org/problem?id=1442 思路分析: <1>维护一个最小堆与最大堆,最大堆中存储最小的K个数,其余存储在最小堆中; <2>使用Tr ...