5.单件模式(Singleton Pattern)

在单件模式一章中,Head Fist一书主要是通过“巧克力工厂”一例去讲解优化代码。


本例粗略介绍:现代化巧克力工厂具备计算机控制的巧克力锅炉。锅炉做的事,就是把巧克力和牛奶融在一起,然后送到下一个阶段,以制造成巧克力棒。若该公司有且仅有一个锅炉,或者说该公司只能运行一个锅炉,那么就需要控制程序只能有一个锅炉实例,另外,在锅炉运行中还要考虑多线程问题。


本例主要需要解决的问题:在这个例子中主要需要解决的是由单例带来的多线程安全问题。


单件模式定义:确保一个类只有一个实例,并提供一个全局访问点。


单件模式的实现:单件模式实现主要有三点:一个私有静态变量、一个私有构造器、一个公有静态实例获取方法。

为了处理多线程安全问题,单件模式主要有两种具体实现方式:通常称其为懒汉式与饿汉式。

饿汉式:为毛称其为饿汉式呢?(个人理解,不代表官方想法)因为他饿,所以他积极。“饿”取得就是积极的意思。积极的去创建实例。它会在类加载时就创建单件实例。

代码如下:

public class Singleton {
   private static Singleton uniqueInstance = new Singleton();//用static关键字保证在类加载时就初始化对象
   private Singleton(){
   }

    public static Singleton getInstance(){
        return uniqueInstance;
     }

}


懒汉式:人懒办事情就喜欢拖拖拉拉,不到最后一刻不办事。在这里就是指:不到万不得已不去创建实例。

代码如下:

public class Singleton {
   private static Singleton uniqueInstance;
   private Singleton() {
   }

   public static Singleton getInstance() {
       if(uniqueInstance == null) {
           synchronized(Singleton.class) {
              if(uniqueInstance == null) {
                 uniqueInstance = new Singleton();
               }
           }
       }
       return uniqueInstance;
   }
}


单件模式的应用场景:因为单件模式的作用是确保某个类全局只有一个实例,因此常常被用来管理共享的资源例如:数据库连接池或者线程池。另外还有:缓存、对话框、处理

偏好设置和注册表的对象、日志对象、充当打印机、显卡等设备的驱动程序的对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值