设计模式--单例模式
1、单例模式
保证一个类仅有一个实例,并提供一个访问它的全局访问点
2、单例模式的结构
- 角色
单例类(Singleton):只可以创建出一个实例
- 类图:

3、单例模式举例
Singleton.java
package com.nick.pattern.singleton;
/**
* 饿汉式单例模式
* @author nick
*/
public class Singleton {
//JVM加载Singleton时就创建instance对象 private static Singleton instance = new Singleton();
private Singleton(){
//设置构造方法的权限为private
} public static Singleton getInstance() {
return instance; //为外部类提供获得instance对象的方法 }
public void say(){
System.out.println("单例模式1");
} }
Singleton2.java
package com.nick.pattern.singleton;
/**
* 懒汉式单例模式
* @author nick
*/
public class Singleton2 {
private static Singleton2 instance; //唯一的对象
private Singleton2(){
//构造方法设置为private权限
}
public static synchronized Singleton2 getInstance(){ //同步方法,避免多线程的问题
if(instance == null){
instance = new Singleton2();//只有对象对存在的时候,才会创建对象(懒汉式)
}
return instance;
}
public void say(){
System.out.println("单例模式2");
}}
Application.java
package com.nick.pattern.singleton;
/**
* 主程序
*/
public class Application {
public static void main(String[] args) {
//Singleton s = new Singleton(); //error,不能创建新的对象
Singleton s1 = Singleton.getInstance(); //只能把单例模式中创建好的对象赋值给s
s1.say();
Singleton2 s2 = Singleton2.getInstance();
s2.say();
}
}
运行结果:

4、单例模式的优缺点
优点:单例类的唯一实例由单例类本身来控制,所以可以很好的控制用户何时访问它。