(设计模式)Singleton和Double-Checked Locking模式

模式摘要

PS:紫色蓝色的字为原书的话

《设计模式解析》一书中提到的建筑师Christopher Alexander对模式的定义:“在某一背景下某个问题的一种解决方案!”。它说,一个模式的描述应该包括:

  • 模式的名称
  • 模式的目的,即要解决的问题
  • 实现方法
  • 为了实现该模式我们必须考虑的限制和约束因素

Singleton模式和Double-Checked Locking模式

模式的名称:Singleton & Double-Checked Locking

模式的目的:保证一个类仅有一个实例,并提供一下访问它的全局访问点。即,希望对象只有一个实例,但没有控制对象实例化的全局对象。还希望确保所有实体使用该对象相同的实例,而无需将引用传给它们。

实现:

  • 添加一个类的私有的静态成员变量,引用所需的对象(初值为null)。
  • 添加一个公共的静态方法,它在成员变量的值为null时实例化这个类(并设置成员变量的值),然后返回该成员变量的值。
  • 将构造方法的状态设置为保护或私有,从而访止任何人直接实例化这个类,绕过静态构造方法机制。

代码示例:项目中,如果有一个系统的工厂类,或者是数据库工厂类,通常这个工厂模式中会用到单件模式(Singleton)

代码一(JAVA - Singleton):单线程

public   class  SimpleFactory  {
        
private static SimpleFactory factory = null;
        
private SimpleFactory() {
        }

        
public static SimpleFactory getInstance() {
                
if(factory == null)
                        factory 
= new SimpleFactory();
                
return factory;
        }

}

代码二(JAVA - Singleton):多线程1(设计模式解析中推荐)

public   class  SimpleFactory  {

        
private SimpleFactory() {
        }

        
        
public static SimpleFactory getInstance() {
                
return Factory.factory;
        }


        
/**
         * 用类来装载SimpleFactory的唯一的实例
         
*/

        
private static class Factory {
                
static final SimpleFactory factory = new SimpleFactory();
        }

}

代码三(JAVA - Double-Checked Locking):多线程2

public   class  SimpleFactory  {
        
private static SimpleFactory factory = null;
        
private SimpleFactory() {
        }

        
public static SimpleFactory getInstance() {
                
if (factory == null{
                        
synchronized(this{
                                
if (factory == null{
                                        factory 
= new SimpleFactory();
                                }

                        }

                }

                
return factory;
        }

}

调用都是一致的

public   static   void  main(String[] args)  {
          SimpleFactory factory 
= SimpleFactory.getInstance();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值