一、定义
FlyWeight模式,构造型模式,通过与其他类似的对象共享数据,从而减小内存
二、类图
工作流程:
测试class,首先创建享元工厂,内部维护一个map,以key-value存储,value代表的是共享元素:
IFlyWeightElem
接口的作用是为了保证在工厂的元素具有一致性,可以不带接口,例如共享String,只要是一样的元素即可。创建好工厂后,当测试类通过工厂来获取元素时,如果map中有元素,直接返回元素对象,如果没有元素,先创建后,存入map,再返回,从而实现元素共享
三、代码
// 所有共享元素的实现
public interface IFlyWeightElem {
void show();
}
public class FlyWeightElem implements IFlyWeightElem {
private String name;
public FlyWeightElem(String name) {
this.name = name;
}
@Override
public void show() {
System.out.println(name);
}
}
工厂
public class ShareFactory {
Map<Integer, IFlyWeightElem> map = new HashMap<>();
public IFlyWeightElem getBall(int num) {
IFlyWeightElem elem = map.get(num);
if (elem == null) {
elem = new FlyWeightElem("第" + num + "大洲");
map.put(num, elem);
}
return elem;
}
}
测试类
public class Main {
public static void main(String[] args) {
ShareFactory shareFactory = new ShareFactory();
IFlyWeightElem ball1 = shareFactory.getBall(1);
IFlyWeightElem ball2 = shareFactory.getBall(1);
System.out.println(ball1 == ball2);
ball1.show();
ball2.show();
}
}