2 better world better_world 于 2017.09.16 17:51 提问

java中为什么有的函数不采用 构造函数 创建对象

如题

比如Calendar对象 ,只能采用Calendar.getInstance();来创建对象

而不能采用new Calendar();

这样做的意义是什么?

谢谢!

3个回答

caozhy
caozhy   Ds   Rxr 2017.09.17 00:50
已采纳

有这么几个动机
(1)程序中某个对象只允许创建一个,或者只需要创建一个。比如说用户权限、工具类等。(单例模式)
(2)创建对象的过程非常复杂,或者创建的过程/参数有严格的限制,所以不宜调用者自己去创建。(工厂模式,生成器模式)
(3)对象的创建依赖外部的代码,比如说操作系统调用,或者web服务。
(4)限制和控制并发,避免在多线程时同步出现问题。
你这里属于第一个情况

oyljerry
oyljerry   Ds   Rxr 2017.09.16 19:27

getInstance应该是单例模式,你多次调用都是共享同一个对象。
有些类是单例模式,有些是实例化

better_world
better_world 同样感谢你的回答
2 个月之前 回复
Small_Mouse0
Small_Mouse0   Ds   Rxr 2017.09.16 20:12

【new Calendar();】会去堆里开一块内存,同时也会刷新对象的属性,,

【Calendar.getInstance();】一般情况下在单利模式用,,构造方法私有,通过公有静态方法获取对象。
也有可能不是,

有些地方需要【保留对象属性】或者【创建对象时很费资源】或者【。。。。。】原因很多,,此时用单例很合适
有的地方每次创建都需要输入参数,比如new User("name","id");。。。。等情况用new 构造比较合适

看需求用,优先考虑单例,省资源,而且少了创建对象是的消耗。

better_world
better_world 同样感谢你的回答
2 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片