zoukankan      html  css  js  c++  java
  • 享元模式(Flyweight Pattern)

    标签 : 设计模式


    模式简介
      享元模式是一种结构型模式
      当有大量重复对象时,通过共享对象,来达到减少系统运行时对象的总数的目的。
      避免对象过多导致内存溢出。提升效率。
      享元模式以共享的方式高效地支持大量的细粒度对象
      需要有一个工厂来控制对象生成。

    核心实现
      在对象工厂中放一个HashMap,在HashMap中能查找到该对象就直接返回,查找不到才new一个新的,并放在HashMap里面。

    例子
    (1)数据库中的数据库连接池。
    (2)多线程中的线程池。
    (3)java中的String存放在常量池。

    UML类结构图

    角色
    (1)抽象享元(Flyweight)角色:给出一个抽象接口,以规定出所有具体享元角色需要实现的方法。

    (2)具体享元(ConcreteFlyweight)角色:实现抽象享元角色所规定出的接口。如果有内蕴状态的话,必须负责为内蕴状态提供存储空间。

    (3)享元工厂(FlyweightFactory)角色:本角色负责创建和管理享元角色。本角色必须保证享元对象可以被系统适当地共享。当一个客户端对象调用一个享元对象的时候,享元工厂角色会检查系统中是否已经有一个符合要求的享元对象。如果已经有了,享元工厂角色就应当提供这个已有的享元对象;如果系统中没有一个适当的享元对象的话,享元工厂角色就应当创建一个合适的享元对象。

    享元模式和原型模式的区别?
    (1)原型是创建型模式,享元是结构型模式;
    (2)原型是创建过程复杂,直接内存复制。享元是需要的对象太多,通过复用来减少内存消耗。

    除了单纯享元模式,还有复合享元模式。

  • 相关阅读:
    (转)单机上配置hadoop
    整数划分 Integer Partition(二)
    整数划分 Integer Partition(一)
    深入理解计算机系统:信息的处理和表示(二)整数四则运算
    深入理解计算机系统:信息的处理与表示(一)基础
    从《营造法式》为何成书于北宋 谈起
    (转)排列算法 Permutation Generation
    洛谷2971 [USACO10HOL]牛的政治Cow Politics
    洛谷1549 棋盘问题(2)
    洛谷3084 [USACO13OPEN]照片Photo
  • 原文地址:https://www.cnblogs.com/banyu/p/6680943.html
Copyright © 2011-2022 走看看