Flyweight Pattern
可重用对象的设计模式。
ref: 享元模式 | 菜鸟教程
工厂类维护一个关于对象的哈希表,当需要调用对象时,查表,如果有对应对象则返回,如果没有则创建。
使得哈希表中的对象可重用。
- ShapeFactory 中存一个哈希表,指向所有的已生成对象。
- 如果外部模块要访问对象,先检查对象是否已存在,不存在则创建,存在则直接返回。
public class Circle implements Shape {
private String color;
private int x;
private int y;
private int radius;
public Circle(String color){
this.color = color;
}
public void setX(int x) {
this.x = x;
}
public void setY(int y) {
this.y = y;
}
public void setRadius(int radius) {
this.radius = radius;
}
@Override
public void draw() {
System.out.println("Circle: Draw() [Color : " + color
+", x : " + x +", y :" + y +", radius :" + radius);
}
}
import java.util.HashMap;
public class ShapeFactory {
private static final HashMap<String, Shape> circleMap = new HashMap<>();
public static Shape getCircle(String color) {
Circle circle = (Circle)circleMap.get(color);
if(circle == null) {
circle = new Circle(color);
circleMap.put(color, circle);
System.out.println("Creating circle of color : " + color);
}
return circle;
}
}
- 核心是 Factory 中的哈希表
- Factory 在 getCircle() 中,如果存在,返回 circle 对象,如果不存在,实例化后返回。