定义
运用共享技术有效地支持大量细粒度的对象,该模式属于结构型模式。
应用场景
系统对象过多
优点
节省内存和CPU资源
具体代码实现
例子说明:杯子对象,根据传入的容量大小去存储对象到hashmap中,创建一个对象前先判断hashmap里是否有,若有则不创建,若无则创建并加入到hashmap。
对象
package com.elaine.testpattern.flyweight;
/**
* 杯子对象
* author: elaine
* date: 2021/4/26
*/
public class Cup {
private int capacity;
private String color;
private String shape;
/**
* 构造函数
*
* @param capacity 容量
*/
public Cup(int capacity) {
this.capacity = capacity;
}
public int getCapacity() {
return capacity;
}
public void setCapacity(int capacity) {
this.capacity = capacity;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public String getShape() {
return shape;
}
public void setShape(String shape) {
this.shape = shape;
}
@Override
public String toString() {
return "Cup{" +
"capacity='" + capacity + ''' +
", color='" + color + ''' +
", shape='" + shape + ''' +
'}';
}
}
工厂
用于管理
package com.elaine.testpattern.flyweight;
import android.util.Log;
import java.util.HashMap;
/**
* 容器管理
* author: elaine
* date: 2021/4/26
*/
public class CupFactory {
//hashMap存储对象
private static final HashMap<Integer, Cup> containerHashMap = new HashMap<>();
public static Cup getCup(int capacity) {
//获取hashMap中是否有对象,若无则创建,若有则直接放回对象
Cup cup = containerHashMap.get(capacity);
if (cup == null) {
cup = new Cup(capacity);
containerHashMap.put(capacity, cup);
Log.e("建立新的实体对象--杯子", capacity + "毫升");
}
return cup;
}
}
运行代码
private void use() {
Cup cup = CupFactory.getCup(100);
cup.setColor("红色");
cup.setShape("圆形");
Log.e("cup", cup.toString());
Cup cup2 = CupFactory.getCup(200);
cup2.setColor("黄色");
cup2.setShape("方形");
Log.e("cup2", cup2.toString());
Cup cup3 = CupFactory.getCup(300);
cup3.setColor("黄色");
cup3.setShape("圆形");
Log.e("cup3", cup3.toString());
//这个对象第一个就创建了,所以不需要再创建了
Cup cup4 = CupFactory.getCup(100);
cup4.setColor("红色");
cup4.setShape("长方形");
Log.e("cup4", cup4.toString());
}