文章来源:软件秘笈--设计模式那点事
单例模式(Singleton Pattern)
定义:确保某一个类只有一个实例,而且向整个系统提供这个实例的获取方法。
使用单例模式的要点:
1、某各类只能有一个实例。
2、该类必须自己创建这个实例。
3、该类必须向系统提供这个实例。
模式结构图:
代码:
第一部分;线程安全的单例对象
//单例模式-------线程安全
package com.singleton;
public class Singleton {
//类共享实例对象
private static Singleton singleton = null;
//私有构造方法
private Singleton(){
System.out.println("This is Singleton!");
}
//synchronized保证线程安全,避免竞争
public synchronized static Singleton getInstance(){
//判断共享对象是否为null,如果是则new一个
if(singleton == null){
singleton = new Singleton();
}
return singleton;
}
}
package com;
import com.singleton.Singleton;
//测试程序
public class Client {
public static void main(String [] args){
//获取single实例
Singleton singleton = Singleton.getInstance();
Singleton singleton2 = Singleton.getInstance();
if(singleton == singleton2){
System.out.println("这是同一个对象");
}
else{
System.out.println("这不是同一个对象");
}
}
}
二、类全局对象实例作为单例对象
//创建一个类全局对象实例作为单例对象
package com.singleton;
public class Singleton1 {
//类共享实例对象实例化
private static Singleton1 singleton = new Singleton1();
private Singleton1(){
System.out.println("This is Singleton1!");
}
public static Singleton1 getInstance(){
return singleton;
}
}
package com;
import com.singleton.Singleton1;
public class Client1 {
public static void main(String [] args){
//获取single实例
Singleton1 singleton = Singleton1.getInstance();
Singleton1 singleton2 = Singleton1.getInstance();
if(singleton == singleton2){
System.out.println("这是同一个对象");
}
else{
System.out.println("这不是同一个对象");
}
}
}