GetInstance和new

1、new 一定要生成一個新對象,分配内存;getInstance()则不一定要再次创建,它可以把一个已存在的引用给你使用,效能上优于new。

2、new 创建后只能当次使用,而getInstance()可以跨栈区域使用,或者远程跨区域使用。所以getInstance()通常是创建static静态实例方法的。


写在前面:一个类,只是表达对象是怎样的,而如果类实例化之后,它就是一个对象了。也就是说,实体化之后的东西,就是一个东西了。一个客观的实体,可以进行各种的操作和设置了。而对象的实例化方法,也是比较多的,最常用的方法是直接使用new,而这是最普通的,如果要考虑到其它的需要,如单实例模式,层次间调用等等。直接使用new就不可以实现好的设计好,这时候需要使用间接使用new,即很多人使用的GetInstance方法。这是一个设计方式的代表,而不仅仅指代一个方法名。

使用new
如Object _object = new Object(),这时候,就必须要知道有第二个Object的存在,而第二个Object也常常是在当前的应用程序域中的,可以被直接调用的。而往往,程序集中引用到的Dll可以不是在当前的应用程序域上面使用的。
举例:
远程的服务的DLL,被直接地引用到当前的应用程序域中,同时又假设Object是远程的,这时候使用new就不会生效的。又很容易会导致层次比较乱。
使用单例模式时,也经常不会使用new,因为一般情况下,都是使用静态声明实例的(static),所有的程序都使用一个实例,多线程下,需要处理并发而使用Lock关键字。然后不可以使用new,那就只有GetInstance了。
格式如下
static Object _object = new Object;
static Object _synchroLock = new Object;
public static Object GetInstance()
{
if(_object == null)
{
lock(_synchroLock)
{
if(_object == null)
        _object = new Object();
}
}
return _object;
}
这是一个双锁的写法,不过,也是经常使用的。

远程与GetInstance
如果实例是远程的,也就是可以是使用Remoting写的对象。使用GetInstance比较方便,如果考虑到对象可以是远程,也可以是本地的,使用GetInstance再灵活。
因为远程对象或本地对象是根据配置文件来获取的,而GetInstance的方法内部是根本配置文件抓取对象,这样,外部调用的时候是一样的。可以达到调用透明的功能。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值