Singletonパターン

Singleton模式

State模式中,应该有人注意到,修改前的编码内每次都要生成表示消息用的对象pr。
这样的话就又可能浪费了存储器。因此,只要存在只有一个对象的类的话就很方便了。把这个类的模式称为 Sigleton。

由于只要控制事例的数目,所以在类中用static。那么我们来看一下实际的Java编码。

源代码:
                                
    class PrintPanel{
        void Print(String s){
            System.out.println(s);
        }
    }

                                
                                
应用了Singleton模式的PrintPanel类:
                                
    class PrintPanel{
        private static PrintPanel _instance;
        public synchronized static PrintPanel instance(){
            if (_instance == null){
            _instance = new PrintPanel();
            }
            return _instance;
        }
        void Print(String s){
            System.out.println(s);
        }
        protected PrintPanel(){}
    }
                                
                                

这样的话,要求instance()时,只要已经生成instatnce,就能返回其对象。反之,则生成new PrintPanel()。


    class EngineRunning extends EngineState{
        PrintPanel pt = PrintPanel.instance();
        void Up(EngineBoxeb){
            pt.Print("No More Up");
            eb.ChangeState(new EngineRunning());
        }
        void Down(EngineBox eb){
            pt.Print("Down to idle from running");
            eb.ChangeState(new EngineIdle());
        }
        void ShowCurrentState(){
            pt.Print("State:running");
        }
    }
                    

有关生成如上所述。

不是new生成的,而是作为PrintPabnel.instance()获得对象。Singleton模式的事例能够扩展到两个以上。在实际应用中,与这次的EngineBox一样,常常与其他模式配合起来使用。