【Java】java实例化,优化,getInstance方法,相同属性的对象,只用一个实例,静态工厂初始化

如果某个对象,它经常使用,而每次使用时,都会去创建,由于创建、销毁都会消耗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 + '\'' +
                '}';
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值