Java设计模式--单例模式(Singleton)

概述


  • 定义:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法。
  • 实现:私有静态成员变量,存放实例;私有构造方法,防止new实例;公共静态方法,创建或返回私有静态成员变量存放的实例
  • 懒汉模式:工厂方法时实例对象,运行时实例
  • 饿汉模式:私有静态成员变量直接赋值,编译直接实例对象
  • 单例模式是一种对象创建型模式。
  • 学习难度:★☆☆☆☆
  • 使用频率:★★★★☆

优缺点


  • 优点
    • 减少内存和性能的开销
    • 共享资源
  • 缺点
    • 需要额外的处理线程安全
    • 要考虑单例会GC的问题(网上错误的观点)

类图


在这里插入图片描述

组成角色


  • 单例角色(Singleton)

Code Example


  • 饿汉式
/**
 * 单例模式<br/>
 * 1、将构造函数变为私有的。彻底断开了使用构造函数来得到类的实例的通道<br/>
 * 2、提供一个自己的对象以及访问这个对象的静态方法。<br/>
 * 
 * @author yanbin
 * 
 */
// 1、饿汉式:
public class Singleton {

   // 在自己内部定义自己一个实例,注意这是private 只供内部调用
   private static Singleton instance = new Singleton();

   // 如上面所述,将构造函数设置为私有
   private Singleton() {
   }

   // 静态工厂方法,提供了一个供外部访问得到对象的静态方法
   public static Singleton getInstance() {
      return instance;
   }

}
  • 懒汉式
// 2、懒汉式:
class Singleton_2 {

   // 定义一个对象的私有静态变量
   private static Singleton_2 instance = null;

   // 设置为私有的构造函数
   private Singleton_2() {
   }

   // 静态工厂方法,并运用同步
   public static synchronized Singleton_2 getInstance() {
      // 这个方法比上面有所改进
      if (instance == null) {
         // 实例化
         instance = new Singleton_2();
      }
      return instance;
   }

}

猜你喜欢

转载自blog.csdn.net/yanbin0830/article/details/88821636