设计模式--单例模式

设计模式--单例模式

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

原文地址:https://www.cnblogs.com/sinlearn/p/11881430.html