本文介绍23种设计模式之享元模式。
定义
运用共享技术来有效地支持大量细粒度对象的复用。它通过共享已经存在的对象来大幅度减少需要创建的对象数量、避免大量相似类的开销,从而提高系统资源的利用率。 简单来说就是通过管理对象,提高复用率,节省消耗。
描述
- 模式名称:FLYWEIGHT(享元)
- 类型:对象结构型模式
- 意图:运用共享技术有效地支持大量细粒度的对象。
- 适用性:
- 一个应用程序使用了大量的对象。
- 完全由于使用大量的对象,造成很大的存储开销。
- 效果:
- 优点:
- 减少对象的创建,降低系统的内存,使效率提高。
- 缺点:
- 提高了系统的复杂度,需要分离出外部状态和内部状态,而且外部状态具有固有化的性质,不应该随着内部状态的变化而变化,否则会造成系统的混乱。
类图
- FlyweightFactory 是享元工厂角色,它是关键字 key 来管理具体享元;
- Flyweight 是抽象享元角色,里面包含了享元方法 operation(UnsharedConcreteFlyweight)
- UnsharedConcreteFlyweight 是非享元角色,里面包含了非共享的外部状态信息;
- 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;
}
}