在面向对象编程中,我们无时无刻都可能在产生对象,因为我们的代码需要对象,但值得注意的是,我们有时候也有可能是在无谓的产生对象,更加可怕的是,这些累赘的对象会造成难以排查的BUG,尤其是在多线程编程中。
所以,合理的产生对象也是一个学问。
有些对象我们只需要一个,像是线程池,缓冲等,这类对象只能有一个实例,一旦产生多个实例就会出现问题。所以,我们必须找到一种方法来确保我们的代码中只有一个实例。
首先我们想到的第一个解决方法就是声明一个全局变量,然后将对象赋值给该全局变量,但是这意味着我们必须在程序一开始的时候就要创建好该对象,但我们应该是在需要的时候才创建对象,而且如果这个对象本身非常耗费资源的话,这就是一种浪费。
提到创建对象,这里有一点必须要提到:
static BluetoothSocket socket = null;
因为java鼓励人们在声明对象的时候赋予对象初始值以免出现问题,但对象这时候并没有被创建!真正的创建对象应该是通过new和反射机制来产生。
使用全局变量的时候,我们必须确保整个程序中只有一份,因为使用全局变量的目的就是为了共享资源,而共享资源必须到达两个条件:不变和共享。不变,指的是这个资源在整个程序中必须只有一份,而共享是指它的变化必须对共享它的所有对象是可见的,否则,所有对象都有自己的一份,何来共享呢?
因此,我们必须确保一件事:一个类只有一个实例,其他类无法自行产生它的实例。
使用单例模式就能确保这点。