单例模式
单例模式是JAVA设计模式中较为简单的一种,属于创建型模式,这种模式提供了一种创建对象的方式。
单例模式涉及到一个单一的类,这个类负责创建自己的对象同时也确保只有单一的对象被创建,并且提供了唯一的一种访问该对象的方法,可以直接调用来访问,不需要再实例化这个对象。
特点:
单例模式中的单例类只能有一个实例,并且必须是自己创建的唯一的实例,还要提供方法来访问这个实例。
例子:
创建一个SingleObject类,这个类中有一个私有的构造函数和一个静态的实例,还有一个提供给外界访问方法和一个静态的实例,我们通过SingleTest这个类获取这个对象。
SingleObject类:
SingleTest类:
运行结果为:
单例模式通过保证一个类仅仅有一个实例并且提供一个能够访问它的全局的访问点来控制实例的数量,这样能够控制实例的数量,防止一个全局使用的类被频繁地创建和销毁,以节省系统资源。
如何判断是否已经有了这个单实例呢?可以通过判断这个实例是否为空,如果是则创建如果不是则返回。
优点:
只有一个实例,减少了大量的开销。
缺点:
没有接口,无法继承。
同时从上述代码中可以发现,这样的实现单例模式的方法是不支持多线程操作的,因为如果有多个线程同时进入,可能会造成多次实例化的结果。
因此可以将这句:public static Singleton getInstance() 改为 public static synchronized Singleton getInstance(),使用同步锁来防止多线程所造成的后果。