effective java--关于静态工厂方法代替构造器

最近看effective java上说考虑用静态工厂方法代替构造器,这样可以避免每次调用都创建一个新的对象。读到这个时候心里有个疑问:这样子通过静态构造方法获取到的对象是否是同一个?id自增长类型的bean通过这个方法来创建且插入到数据库后,再次通过静态构造方法获取到的id是否是一样?然后我写了测试代码来测试下:

bean方面的代码:

//静态构造方法
	public static LpaCategoryBean getEntityExceptId(String categorycode,
			String categoryname, String unit, boolean isenabled, String remark){
		return new LpaCategoryBean( categorycode,categoryname, unit, isenabled, remark);
	}
	
	public static LpaCategoryBean getEntity(Integer categoryid,String categorycode,
			String categoryname, String unit, boolean isenabled, String remark){
		return new LpaCategoryBean( categoryid,categorycode,categoryname, unit, isenabled, remark);
	}
      在业务层调用静态构造方法且数据:

public void testStatic() {
		LpaCategoryBean bean = LpaCategoryBean.getEntity(null,"test", "test", "test", true, "test");
		categoryDaoImpl.save(bean);
		System.out.println("bean="+bean);
		LpaCategoryBean bean2 = LpaCategoryBean.getEntity(null,"test1", "test1", "test1", true, "test1");
		System.out.println("bean2="+bean2);
		System.out.println(bean==bean2);
		System.out.println("==================");
		LpaCategoryBean bean3 = LpaCategoryBean.getEntityExceptId("test", "test", "test", true, "test");
		categoryDaoImpl.save(bean3);
		System.out.println("bean3="+bean3);
		LpaCategoryBean bean4 = LpaCategoryBean.getEntityExceptId("test1", "test1", "test1", true, null);
		System.out.println("bean4="+bean4);
		System.out.println(bean3==bean4);
		System.out.println("==================");
		categoryDaoImpl.save(bean4);
		System.out.println("bean4="+bean4);
		System.out.println(bean3==bean4);
	}
结果:

Hibernate: insert into EP.Security.LPA_Category (CategoryCode, CategoryName, IsEnabled, Remark, Unit) values (?, ?, ?, ?, ?)
bean=LpaCategory [categoryid=48,categorycode=test,categoryname=test,unit=test,isenabled=true,remark=test]
bean2=LpaCategory [categoryid=null,categorycode=test1,categoryname=test1,unit=test1,isenabled=true,remark=test1]
false
==================
Hibernate: insert into EP.Security.LPA_Category (CategoryCode, CategoryName, IsEnabled, Remark, Unit) values (?, ?, ?, ?, ?)
bean3=LpaCategory [categoryid=49,categorycode=test,categoryname=test,unit=test,isenabled=true,remark=test]
bean4=LpaCategory [categoryid=null,categorycode=test1,categoryname=test1,unit=test1,isenabled=true,remark=null]
false
==================
Hibernate: insert into EP.Security.LPA_Category (CategoryCode, CategoryName, IsEnabled, Remark, Unit) values (?, ?, ?, ?, ?)
bean4=LpaCategory [categoryid=50,categorycode=test1,categoryname=test1,unit=test1,isenabled=true,remark=null]
false

证明:

这样子通过静态构造方法获取到的对象是应该不是同一个,id也不相同。猜测是第二次调用静态构造方法的时候会去把static里的对象清空?后面再看看




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值