经典:单件模式(Singleton Pattern)

剖析经典的单件模式实现 -->
public   class  Singleton  {
    
private static Singleton uniqueInstance;

    
private Sigleton() {}

    
public static Singleton getInstance() {
        
if (uniqueInstance == null)
        
{
            uniqueInstance 
= new Singleton();
        }

        
return uniqueInstance;
    }

}


巧克力工厂
-->
public   class  ChocolateBoiler  {
    
private boolean empty;
    
private boolean boiled;

    
public static ChocolateBoiler() {
        empty 
= true;
        boiled 
= false;
    }

    
public void fill() {
        
if (isEmpty())
        
{
            empty 
= false;
            boiled 
= true;
            
//在锅炉内填满巧克力和牛奶的混合物
        }

    }

    
public void drain() {
        
if (!isEmpty() && isBoiled())
        
{
            
//排出煮沸的巧克力和牛奶
            empty = true;
        }

    }

    
public void boil() {
        
if (!isEmpty() && isBoiled())
        
{
            
//将炉内煮沸
            boiled = true;
        }

    }

    
public boolean imEmpty() {
        
return empty;
    }

    
public boolean isBoiled() {
        
return boiled;
    }

}


改进
-->
public   class  ChocolateBoiler  {
    
private boolean empty;
    
private boolean boiled;

    
private static ChoclateBoiler uniqueInstance;
    
    
/*
    private ChocolateBoiler() {
        empty = true;
        boiled = false;
    }
    
*/

    
public static Chocolate getInstance() {
        
private ChocolateBoiler() {
        empty 
= true;
        boiled 
= false;
        }

        
if (uniqueInstance == null)
        
{
            uniqueInstance 
= new ChocolateBoiler();
        }

        
//别忘了这个
        return uniqueInstance;
    }



    
public void fill() {
        
if (isEmpty())
        
{
            empty 
= false;
            boiled 
= true;
            
//在锅炉内填满巧克力和牛奶的混合物
        }

    }

    
public void drain() {
        
if (!isEmpty() && isBoiled())
        
{
            
//排出煮沸的巧克力和牛奶
            empty = true;
        }

    }

    
public void boil() {
        
if (!isEmpty() && isBoiled())
        
{
            
//将炉内煮沸
            boiled = true;
        }

    }

    
public boolean imEmpty() {
        
return empty;
    }

    
public boolean isBoiled() {
        
return boiled;
    }

}


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

处理多线程
-->
public   class  Singleton  {
    
private static Singleton uniqueInstance;

    
private Sigleton() {}
    
    
//Synchronized
    public static Synchronized Singleton getInstance() {
        
if (uniqueInstance == null)
        
{
            uniqueInstance 
= new Singleton();
        }

        
return uniqueInstance;
    }

}


使用“急切”创建实例
-->
public   class  Singleton  {
    
private static Singleton uniqueInstance = new Singleton();

    
private Singleton() {}
    
public static Singleton getInstance() {
        
return uniqueInstance;
    }

}


使用“双重检查锁”,在getInstance()中减少使用同步
public   class  Singleton  {
    
//volatile
    private volatile 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、付费专栏及课程。

余额充值