设计模式--单例模式
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、单例模式的优缺点
优点:单例类的唯一实例由单例类本身来控制,所以可以很好的控制用户何时访问它。