注:转载请注明出处;
保证一个类仅有一个实例,提供一个访问这个实例的全局访问点
适用性:
1. 当类只有一个实例而客户可以从一个众所周知的访问点访问时。
2. 当这个唯一实例是通过子类可扩展的,并且客户应该无需更改代码就能适用一个扩展的实例时。
注意:单例模式中有三个注意点:
1, 单例模式类中的引用必须是私有静态的,因为它以后要在静态的方法中被使用。
2, 单例模式类中的无参构造函数,必须是Private,因为不让外界创造该类的对象
3, 单例模式还有另一种写法,就是在构造函数中把那个对象创造好,
代码例子:
测试类代码:
打印结果:
sing1对象在内存中的地址为:com.supan.io.SingletonPattern@4f1d0d
sing2对象在内存中的地址为:com.supan.io.SingletonPattern@4f1d0d
保证一个类仅有一个实例,提供一个访问这个实例的全局访问点
适用性:
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