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;
   }

}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值