用途


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

结构


图-享元模式结构图

Flyweight : 它是所有具体享元类的超类或接口,通过这个接口,Flyweight 可以接受并作用于外部状态。

abstract class Flyweight {
    public abstract void Operation(int extrinsicstates);
}

ConcreteFlyweight :  是继承 Flyweight 超类或实现 Flyweight 接口,并为内部状态增加存储空间。

class ConcreteFlyweight extends Flyweight {
    @Override
    public void Operation(int extrinsicstates) {
        System.out.println("共享的Flyweight : " + extrinsicstates);
    }
}

UnsharedConcreteFlyweight : 指那些不需要共享的 Flyweight 子类,因为 Flyweight 接口共享成为可能,但它并不强制共享。

class UnsharedConcreteFlyweight extends Flyweight {
    @Override
    public void Operation(int extrinsicstates) {
        System.out.println("不共享的Flyweight : " + extrinsicstates);
    }
}
FlywightFactory :是一个享元工厂,用来创建并管理 Flyweight 对象。它主要是用来确保合理地共享 Flyweight ,当用户请求一个 Flyweight 时, FlyweightFactory 对象提供一个已创建的实例或创建一个(如果对象不存在的话)。
class FlywightFactory {
    private Hashtable<String, Flyweight> flyweights = new Hashtable<String, Flyweight>();
    
    public FlywightFactory() {
        flyweights.put("X", new ConcreteFlyweight());
        flyweights.put("Y", new ConcreteFlyweight());
        flyweights.put("Z", new ConcreteFlyweight());
    }
    
    public Flyweight GetFlyweight(String key) {
        return ((Flyweight)flyweights.get(key));
    }
}

测试代码

public class FlyweightPattern {
    public static void main(String[] args) {
        int extrinsicstates = 1;    
        FlywightFactory factory = new FlywightFactory();
        
        Flyweight fx = factory.GetFlyweight("X");
        fx.Operation(extrinsicstates);
        
        Flyweight fy = factory.GetFlyweight("Y");
        fy.Operation(++extrinsicstates);
        
        Flyweight fz = factory.GetFlyweight("Z");
        fz.Operation(++extrinsicstates);
        
        Flyweight uf = new UnsharedConcreteFlyweight();
        uf.Operation(++extrinsicstates);
    }
}

运行结果

共享的Flyweight : 1
共享的Flyweight : 2
共享的Flyweight : 3
不共享的Flyweight : 4
推荐

本文属于 JAVA设计模式系列

参考资料

《大话设计模式》

《HeadFirst设计模式》

JAVA 设计模式 享元模式相关推荐

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

    [设计模式]Java设计模式 - 享元模式

  2. java设计模式---享元模式

    Java深入到一定程度,就不可避免的碰到设计模式这一概念,了解设计模式,将使自己 对java中的接口或抽象类应用有更深的理解.设计模式在java的中型系统中应用广 泛,遵循一定的编程模式,才能使自己的 ...

  3. JAVA设计模式--享元模式

    目录 一.什么是享元模式 二.享元模式在Java中的典型应用 三.享元模式的结构 单纯享元模式 复合享元模式 四.享元模式应用举例 五.享元模式的适用性 六.享元模式的特点 七.总结 一.什么是享元模 ...

  4. Java设计模式----------享元模式

    1.介绍 享元模式通过尽可能的复用已经存在的对象,从而尽量少的创建新对象,以节约系统的内存和提供系统性能.在享元模式中,对象的属性分为两种,内部状态和外部状态.内部状态指的是对象中不随外部变化的属性, ...

  5. Python设计模式-享元模式

    Python设计模式-享元模式 基于Python3.5.2,代码如下 #coding:utf-8class Coffee:name = ""price = 0def __init_ ...

  6. 10-Python与设计模式--享元模式

    10-Python与设计模式--享元模式 一.网上咖啡选购平台 假设有一个网上咖啡选购平台,客户可以在该平台上下订单订购咖啡,平台会根据用户位置进行线下配送.假设其咖啡对象构造如下: class Co ...

  7. 设计模式--享元模式实现C++

    /********************************* *设计模式--享元模式实现 *C++语言 *Author:WangYong *Blog:http://www.cnblogs.co ...

  8. Unity设计模式——享元模式(附代码)

    Unity设计模式--享元模式(附源码) 享元Flyweight模式是什么 享元模式是一种结构型设计模式, 它摒弃了在每个对象中保存所有数据的方式, 通过共享多个对象所共有的相同状态, 让你能在有限的 ...

  9. 第二十二章 Caché 设计模式 享元模式

    文章目录 第二十二章 Caché 设计模式 享元模式 定义 优点 使用场景 结构图 描述 完整示例 实体类 抽象享元角色 实现享元角色 享元工厂 调用 思考 第二十二章 Caché 设计模式 享元模式 ...

最新文章

  1. php 调试常用函数,PHP几个常用的调试输出函数
  2. 关于git的ssh-key:解决本地多个ssh-key的问题
  3. .frm_.myd_myi转换为.sql导入mysql数据库_把.frm,.myd,myi转换为.sql导入数据库
  4. “约见”面试官系列之常见面试题之第六十六篇之事件委托的原理和实现(建议收藏)
  5. 【CUDA开发】 Check failed: error == cudaSuccess (8 vs. 0) invalid device function
  6. 解决ubuntu18.04中python兼容以及pip兼容问题
  7. python教学反思_Python语言教学反思
  8. 古罗马花园石头雕像喷泉原理
  9. 当我谈跑步时我谈些什么
  10. 安装目录里无法找到计算机,安装软件弹出系统找不到指定的路径提示解决方法...
  11. 使用beautifulSoup
  12. Oracle OCP学习——Catalog的配置与使用
  13. Android解耦库EventBus的使用和源码分析
  14. 基于jQuery的软键盘
  15. 附件 计算机 丢失,Win10系统开始菜单中没有附件解决方法
  16. 如何防止SQL注入攻击?
  17. Next.js了解篇|一文带你梳理清楚 Next.js 的功能
  18. Python数据分析——上海市二手房价格分析
  19. 计算机视觉教程核心版(八)卷积神经网络各种层
  20. k8s.5-使用RKE构建企业生产级Kubernetes集群

热门文章

  1. 吴恩达机器学习笔记 —— 5 多变量线性回归
  2. 领英2017报告:机器学习、大数据工程师成为最热门的新兴职业
  3. 没有安装python如何使用anaconda运行python命令行
  4. 深入探索边缘计算:物联网与5G时代的技术趋势
  5. 揭秘5G+AI时代的机器人世界!七大核心技术改变人类生活【附下载】| 智东西内参...
  6. 人类正在进入超级智能时代,论一种新超级智能的崛起
  7. AR/VR逐渐回暖 联合安防步入未来
  8. 报告 | 2019年全球数字化转型现状研究报告
  9. 深度观察|工业物联网的应用场景和市场潜力
  10. 清华大学:智能驾驶背景下转向系统发展趋势