Shuzheng
12/4/2019 - 4:18 PM

单例设计模式

//一开始就造好(饿汉式)
//什么时候用什么时候造(懒汉式)
//创建一个单例(饿汉式)
public class SingleObject {
  //注意static,因为要在main中调用,main是static的
  //创建 SingleObject 的一个对象
  private static SingleObject instance = new SingleObject();
 
  //让构造函数为 private,这样该类就不会被实例化
  private SingleObject(){}
 
  //获取唯一可用的对象
  public static SingleObject getInstance(){
     return instance;
  }
 
  public void showMessage(){
     System.out.println("Hello World!");
  }
}
//创建一个单例(懒汉式)
public class SingleObject {
  //注意static,因为要在main中调用,main是static的
  //创建 SingleObject 的一个对象
  private static SingleObject instance;
 
  //让构造函数为 private,这样该类就不会被实例化
  private SingleObject(){}
 
  //获取唯一可用的对象
  public static SingleObject getInstance(){
    if(instance == null){
     instamce = new Order();
   }
    return instance;
  }
 
   public void showMessage(){
      System.out.println("Hello World!");
   }
}

//创建一个单例(线程安全的懒汉式)
public class SingleObject {
  //注意static,因为要在main中调用,main是static的
  //创建 SingleObject 的一个对象
  private static SingleObject instance;
 
  //让构造函数为 private,这样该类就不会被实例化
  private SingleObject(){}
 
  //获取唯一可用的对象
  public static SingleObject getInstance(){
    //此判断是为了让效率更高
    if(instance == null){
      sychronized(Bank.class){
        if(instance == null){
          instamce = new Order();
        }
      }
   }
    return instance;
  }
 
   public void showMessage(){
      System.out.println("Hello World!");
   }
}

//调用一个单例
public class SingletonPatternDemo {
   public static void main(String[] args) {
 
      //不合法的构造函数
      //编译时错误:构造函数 SingleObject() 是不可见的
      //SingleObject object = new SingleObject();
 
      //获取唯一可用的对象
      SingleObject object = SingleObject.getInstance();
 
      //显示消息
      object.showMessage();
   }
}

//懒汉式和饿汉式的区别
//饿汉式:坏处,加载时间过长
//        好处,线城安全
//懒汉式:坏处,线程不安全-->多线程时修改
//        好处,延迟对象的创建