2.1 structure 结构性设计模式-Flyweight享

2019-03-27  本文已影响0人  entro

FlyWeight 享元模式

[TOC]

结构性设计模式
又名轻量级模式

1. 简介

2. 四种角色:Flyweight,Concrete Flyweight,Unshared Concrete Flyweight,Flyweight Factory

角色 个数
Flyweight:抽象享元类 一个
Concrete Flyweight: 具体享元类 多个
Unshared Concrete Flyweight:不共享具体享元类 多个
Flyweight Factory:享元工厂类 一个

3. 类图

Flyweight.png

4. 最佳实践

  1. 在享元模式的享元工厂类中通常提供一个静态的工厂方法用于返回享元对象,使用简单工厂模式来生成享元对象。
  2. 在一个系统中,通常只有唯一一个享元工厂,因此享元工厂类可以使用单例模式进行设计。
  3. 享元模式可以结合组合模式形成复合享元模式,统一对享元对象设置外部状态。

5. 适用场景和变种

适用场景

  1. 系统中存在大量相同或相似的对象,这些对象耗费大量的内存资源。
  2. 大部分的对象可以按照内部状态进行分组,且可将不同部分外部化,这样每一个组只需保存一个内部状态。
  3. 由于享元模式需要额外维护一个保存享元的数据结构,所以应当在有足够多的享元实例时才值得使用享元模式。

变种 特殊的两种享元模式:单纯享元模式 复合享元模式

6. 优缺点

优点

缺点

7. 应用场景举例 Integer,Long等5种基本类型的包装类的valueOf方法

public static Long valueOf(long l) {
        final int offset = 128;
        if (l >= -128 && l <= 127) { // will cache
            return LongCache.cache[(int)l + offset];
        }
        return new Long(l);
}
上一篇 下一篇

猜你喜欢

热点阅读