保证一个类仅有一个实例,提供一个访问这个实例的全局访问点
适用性:
1. 当类只有一个实例而客户可以从一个众所周知的访问点访问时。
2. 当这个唯一实例是通过子类可扩展的,并且客户应该无需更改代码就能适用一个扩展的实例时。
注意:单例模式中有三个注意点:
1, 单例模式类中的引用必须是私有静态的,因为它以后要在静态的方法中被使用。
2, 单例模式类中的无参构造函数,必须是Private,因为不让外界创造该类的对象
3, 单例模式还有另一种写法,就是在构造函数中把那个对象创造好,
代码例子:
package com.supan.io; public classSingletonPattern { private static SingletonPattern instance; private SingletonPattern() {} public static SingletonPatterngetInstance() { if(instance == null) { instance = new SingletonPattern(); } return instance; } }
测试类代码:
package com.supan.io; public classSingletonPatternTest { public static void main(String[] args) { // TODO Auto-generated method stub SingletonPatternsing1 =SingletonPattern.getInstance(); SingletonPatternsing2 = SingletonPattern.getInstance(); System.out.println("sing1对象在内存中的地址为:" + sing1); System.out.println("sing2对象在内存中的地址为:" + sing2); } }
打印结果:
sing1对象在内存中的地址为:com.supan.io.SingletonPattern@4f1d0d
sing2对象在内存中的地址为:com.supan.io.SingletonPattern@4f1d0d