1.白话文定义
享元工厂控制,使用HashMap实现缓冲池重用现有的同类对象,如果没有匹配到对象,则创建新对象。
2.角色
1.享元接口类:抽象的享元角色,定义出对象的内部和外部状态;
2.具体享元实现类:具体的享元角色,实现具体的业务;
3.享元工厂类:用于构建一个池对象,同时享元工厂类会提供公共方法获取享元类;
4.客户端调用类。
3.类图
4.代码实现
1.享元接口类
public interface Flyweight {
void operation();
}
2.具体享元实现类
public class ConcreteFlyweight implements Flyweight {
private String type;
public ConcreteFlyweight(String type) {
this.type = type;
}
@Override
public void operation() {
System.out.println(type + " 享元具体实现类 执行方法");
}
}
3.享元工厂类
public class FlyweightFactory {
static Map<String, Flyweight> POOLS = new HashMap<>();
public Flyweight getFlyweight(String type) {
if (!POOLS.containsKey(type)) {
POOLS.put(type, new ConcreteFlyweight(type));
}
return POOLS.get(type);
}
}
4.客户端调用类
public class Main {
public static void main(String[] args) {
FlyweightFactory flyweightFactory = new FlyweightFactory();
Flyweight wx = flyweightFactory.getFlyweight("wx");
wx.operation();
}
}
5.优点
大大减少对象的创建,降低系统的内存,使效率提高。
6.缺点
为了使对象可以共享,享元模式需要将享元对象的状态外部化,而读取外部状态使的运行时间变长。
7.使用场景
1.系统需要创建大量对象;
2.对象的状态大部分可以进行外部化。