您的位置:首页 > 其它

经典:单件模式(Singleton Pattern)

2007-12-05 10:10 260 查看

剖析经典的单件模式实现-->




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;


    }


}




一个类,一个责任。

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  class null 多线程