设计模式--单例模式

让人想犯罪 __ 提交于 2019-12-04 20:19:21

设计模式--单例模式

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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!