如果某个对象,它经常使用,而每次使用时,都会去创建,由于创建、销毁都会消耗CPU和内存资源,并且有很多相同对象,在同一个流程中反复创建,比如在开发系统时,许多的vo中有相同的属性,比如部门属性。
我这里就写了一个简单的对象池,只有手动调用getInstance才能实现相同属性的对象使用一个实例。
所有的vo里面的属性都可以使用静态工厂模式。用一个对象池来存储对象,所有的vo中相同对象的引用相同。这样节约了后端资源,也不会让前端得到错误的数据。
package tangxz.arrays;
import java.beans.Transient;
import java.io.Serializable;
/**
* @author: 唐小尊
* @email: 1171702529@qq.com
* @cate: 2021/07/12 17:13
*/
public class Department implements Serializable {
private static final long serialVersionUID = 362498820763181265L;
private int id;
private String name;
private String address;
//对象池
private static Department[] departments = new Department[8];
//对象池元素个数
private static int index;
//扩容阈值
private static int threshold;
private Department() {
}
public Department(int id, String name, String address) {
this.id = id;
this.name = name;
this.address = address;
}
public static Department getInstance(int id, String name, String address) {
if (departments == null) {
departments = new Department[8];
index = 0;
threshold = (int) (departments.length * 0.75);
}
Department department = new Department(id, name, address);
//查看是否有相同对象
for (int i = 0; i < index; i++) {
if (departments[i].toString().equals(department.toString())) {
return departments[i];
}
}
departments[index++] = department;
//扩容
if (index >= threshold) {
Department[] newDepartments = new Department[(int) (departments.length + departments.length / 2)];
System.arraycopy(departments, 0, newDepartments, 0, index);
departments = newDepartments;
}
return departments[index - 1];
}
@Override
public String toString() {
return "Department{" +
"id=" + id +
", name='" + name + '\'' +
", address='" + address + '\'' +
'}';
}
}