zoukankan      html  css  js  c++  java
  • Flyweight

    享元模式的本质其实和singleton的概念有些类似,只不过singleton强调的是一个对象,而享元模式描述的一堆“一个对象”。在GOF中举的例子是英文单词,如果为每一个字母都建立一个对象,这样对于内存消耗比较大,于是他实际是只是创建了24个(英文)字符,至于每个字符的位置和颜色都是由一个“外部状态”(实际可以理解为一个实体)通过传递而返回。
    image

    享元模式有两个状态,内部状态和外部状态,内部状态就是各个单个实例所共同一致的部分,也是共享的部分,还有就是外部状态,这个外部状态正是各个原本“实例”不能共享的部分,作为一个外部参数传给共享元工厂的获取方法,以返回一个共享元,这个共享元包含了内部已经定义的好的共享状态,还包括了来自外来参数(环境)指定的“外部状态”。

    我理解享元其实表面提供了一种结构,其实本质他提供的是一种操作。在调研过程中有一个距离非常好,就是缓冲池,我们通过工厂模式返回的是一个连接对象,我们本质并不是获得连接对象,其实我们本质获得的是连接对象里面的访问数据库的操作(Open,ExecuteSql…)。对于上面的例子我们通过享元模式返回的并不是一个字体,其实是想要生成字符的方法然后显示字符。

    所以享元模式其实它的使用场景是作为节省“为了获取某项操作而实例化”的实例。

    其实解释到了缓冲池这个份上,我想这个模式的精髓已经不言而喻了。

  • 相关阅读:
    Redis来啦~~
    高性能mysql——高性能索引策略
    LeetCode 刷题笔记 (树)
    Java 多线程高并发编程 笔记(二)
    Java 多线程高并发编程 笔记(一)
    SVM支持向量机
    决策树
    梯度下降&随机梯度下降&批梯度下降
    统计学习方法读书笔记(1)
    HiBench学习笔记
  • 原文地址:https://www.cnblogs.com/xiashiwendao/p/3220935.html
Copyright © 2011-2022 走看看