享元模式(Flyweight Pattern)

标签 : 设计模式


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

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

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

UML类结构图

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

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

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

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

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

posted @ 2017-04-08 09:46  斑鱼  阅读(263)  评论(0编辑  收藏  举报