5.单件模式(Singleton Pattern)

来源:互联网 发布:linux 调用中文输入法 编辑:程序博客网 时间:2024/06/16 09:48

在单件模式一章中,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
原创粉丝点击