最新消息:

单例模式的升级–单例工厂管理实例化

技术经验 goomoon 1620浏览 0评论

在java程序里,你有没有过这样的想法:

经常new 一个实例,很是麻烦,有些无状态的类,完全可以整个系统里只new一次的,单例模式恰恰可以解决这个问题,可是每个类都写成单例,成本有太大。。。

这个时候,不妨写个单例工厂来试试:

这样妥妥的,,其实仔细看代码不难看出,原理是利用泛型,将所有类的实例放到一个map里,虽然在put的时候用的synchronized线程同步,保证安全,可是难免会有线程多线程不同步的问题,,改进办法之一就是用 ConcurrentHashMap 替代:

其实,本汉需要解释的是,其实就算是多个线程不同步,造成的代价无非是多new 了几次,对性能上的影响也不大,并且getInstance方法里在put的时候,已经保证了put的线程同步,所以此处线程安全的风险不是太大。。

后来有个小伙伴来问我,这个单例工厂,只是能new一些有默认的public的空构造方法的类,,,如果那样,其他地方也可以通过new来实例化这些类,那可不可以把这些类的构造方法写成private的呢,让别人只能通过单例工厂类来实例化????

答案是肯定的,java里有种反射机制,就可以调用类的私有方法。

代码如下:

 

转载请注明:刘召考的博客 » 单例模式的升级–单例工厂管理实例化

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址