JAVA设计模式之享元模式

322 阅读1分钟

本文介绍23种设计模式之享元模式。

定义

运用共享技术来有效地支持大量细粒度对象的复用。它通过共享已经存在的对象来大幅度减少需要创建的对象数量、避免大量相似类的开销,从而提高系统资源的利用率。 简单来说就是通过管理对象,提高复用率,节省消耗。

描述

  • 模式名称:FLYWEIGHT(享元)
  • 类型:对象结构型模式
  • 意图:运用共享技术有效地支持大量细粒度的对象。
  • 适用性:
    • 一个应用程序使用了大量的对象。
    • 完全由于使用大量的对象,造成很大的存储开销。
  • 效果:
  • 优点:
    • 减少对象的创建,降低系统的内存,使效率提高。
  • 缺点:
    • 提高了系统的复杂度,需要分离出外部状态和内部状态,而且外部状态具有固有化的性质,不应该随着内部状态的变化而变化,否则会造成系统的混乱。

类图

1629368231(1).png

  1. FlyweightFactory 是享元工厂角色,它是关键字 key 来管理具体享元;
  2. Flyweight 是抽象享元角色,里面包含了享元方法 operation(UnsharedConcreteFlyweight)
  3. UnsharedConcreteFlyweight 是非享元角色,里面包含了非共享的外部状态信息;
  4. ConcreteFlyweight 是具体享元角色,它实现了抽象享元接口;

实现代码

Flyweight

public interface Flyweight {

    void operation(UnsharedFlyweight unsharedFlyweight);
}

ConcreteFlyweight

public class ConcreteFlyweight implements Flyweight {


    @Override
    public void operation(UnsharedFlyweight unsharedFlyweight) {
        System.out.println("创建成功");
    }
}

FlyweightFactory

public class FlyweightFactory {
    HashMap<String, Flyweight> map;

    public FlyweightFactory() {
        map = new HashMap<>();

    }

    public Flyweight getFlyweight(String key) {
        Flyweight flyweight = map.get(key);
        if (flyweight == null) {
            flyweight = new ConcreteFlyweight();
            map.put(key, flyweight);
        }
        return flyweight;
    }

}