
Java
不想改变
这个作者很懒,什么都没留下…
展开
-
谣传垃圾收集器会吃掉单件,这过分夸大了!
在Java 1.2之前,垃圾收集器有个bug,会造成单件在没有全局的引用时被当作垃圾清楚。也就是说,如果一个单件只有本单件类引用它本身,那么该单件就会被当作垃圾清楚,这造成让人困惑的bug;因为在单件被清除之后,下次调用getInstance()会产生一个“全新的”的那件。对很多程序来说,这会造成让人困惑的行为,因为对象的实例变量值都不见了,一切回到最原始的设置(例如:网络连接被重置)。 J转载 2015-04-10 10:54:25 · 413 阅读 · 0 评论 -
在什么情况下使用单件模式比全局变量好
在Java中,全局变量基本上就是对对象的静态引用。在确保类只有一个实例并提供全局访问的这种情况下使用全局变量会有一些缺点,其中之一:急切实例化VS,延迟实例化。其二:全局变量可以提供全局访问,但是不能确保只有一个实例。全局变量也会变相鼓励开发人员,用许多全局变量指向许多小对象来造成命名空间的污染,单件不鼓励这样的现象,弹弹剑任然可能被滥用。转载 2015-04-10 11:12:21 · 665 阅读 · 0 评论 -
正确使用单件
用“双双重检查加锁”,在个体Instance()中减少使用同步 利用双重检查加锁,首先检查是否实例已经创建了,如果尚未创建,“才”进行同步。这样一来,只有第一次回同步,这正是我们想要的。 来看看代码: public class Singleton { private volatile static Singleton singleton;//volatile关键字转载 2015-04-10 11:20:46 · 438 阅读 · 0 评论 -
命令模式的要点
命令模式:将请求封装成对象,这可以让你使用不同的请求、队列,或者日志请求来参数化其他对象。命令模式也支持撤销操作。 当需要将发出请求的对象和执行请求的对象解耦的时候,使用命令模式 命令模式将发出请求的对象(遥控器)和执行请求的对象(灯)解耦。在被解耦的两者之间是通过命令对象进行沟通的,命令对象封装了接收者和一个或者一组动作调用者通过调用命令对象的execute转载 2015-04-13 14:03:41 · 416 阅读 · 0 评论 -
命令模式的更多用途:队列请求
命令可以将运算块打包(一个接受者和一组动作),然后将它传来传去,就像是一般的对象一样。现在,即使在命令对象被创建许久之后,运算依然可以被调用。事实上,它甚至可以在不同的线程中被调用。我们可以利用这样的特性衍生一些应用,例如:日程安排、线程池、工作队列等。 想象有一个工作队列:你在某一端添加命令,然后另一端则是线程。线程进行下面的工作:从队列中取出一个命令,调用它的execute()方法,等待转载 2015-04-13 13:31:27 · 1393 阅读 · 0 评论