设计模式_单子模式Singleton【转】

我对Singleton设计模式的看法: 
1.   Singleton设计模式保证一个application中就至多只有一个instance,   注意这里界定的是一个application,   而不是一个System.如果不是一个application的话,就不能够保证了。例如:在分布式环境下,虽然单服务器端实现了Singleton,但是多服务器端(System)就有可能不能保证是Singelton。 
      保证application中实现该模式的Singleton   类至多只有一个instance,   可以在一定范围内更好地确定业务逻辑,   尤其是那些保证现实生活中application中只有一个的概念。例如前面说的   数据库连接池就是一个典型; 
2.   Singleton设计模式并不能保证节省资源,这是一点需要澄清的。如果要节省资源,大可不必使用Singleton设计模式,Singleton的设计目标并不是为了节省资源,而且为了保证全局性的逻辑统一; 
3.   Singleton设计模式与其他设计模式(如   Factory设计模式)的联合使用基本上已经成为了一种“普遍”的技巧,对Singleton的熟悉可以帮助我们在理解他人工作上和相互交流上带来方便。 
4.   Singleton设计模式的例子: 
      Singleton设计模式依据设计方法的不同,一般有两种方法,这里面涉及到一个 "delay   initialization "的问题,但基本的原理是一样的。下面分别给出例子: 
      
    /** 
                @(#)SampleManager.java 
      */ 
      
      package   org.quickpoint.SingletonSample; 
      /** 
                      <code> SampleManager </code>   is   a   sample   displaying   usage   of   singleton   design   pattern. 
                      This   is   pre   initialized   implementation. 
                      @author   quickpoint 
                      @version   1.0   02/25/2005   
        */ 
        public   class   SampleManager 
        { 
                    /**   Only   one   instance(   pre   initialized   )*/ 
                    private   static   SampleManager   instance   =   new   SampleManager(); 
                    
                    /**   Constructor 
                            In   a   private   domain   to   ensure   that   could   not   be   initialized   by   outter. 
                      */ 
                    private   SampleManager() 
                    { 
                          System.out.println( "This   is   a   sample   manager. "); 
                    } 
                    
                    public   synchronized   static   SampleManager   getInstance() 
                    { 
                          return   instance;         
                    } 
                    
                    //   Display   how   to   use 
                    public   static   void   main(   String[]   args   ) 
                    { 
                      SampleManager   manager   =   SampleManager.getInstance(); 
                    } 
        } 
----------------------------------------------       
      
        /** 
                @(#)SampleManager.java 
      */ 
      
      package   org.quickpoint.SingletonSample; 
      /** 
                      <code> SampleManager </code>   is   a   sample   displaying   usage   of   singleton   design 
pattern. 
                      This   is   lazy   initialized   implementation. 
                      @author   quickpoint 
                      @version   1.0   02/25/2005   
        */ 
        public   class   SampleManager 
        { 
                    /**   Only   one   instance(   pre   initialized   )*/ 
                    private   static   SampleManager   instance   =   null; 
                    
                    /**   Constructor 
                            In   a   private   domain   to   ensure   that   could   not   be   initialized   by   outter. 
                      */ 
                    private   SampleManager() 
                    { 
                          System.out.println( "This   is   a   sample   manager. "); 
                    } 
                    
                    public   synchronized   static   SampleManager   getInstance() 
                    { 
                            if(   null   ==   instance   ) 
                            { 
                            instance   =   new   SampleManager(); 
                            } 
                            
                          return   instance;         
                    } 
                    
                    //   Display   how   to   use 
                    public   static   void   main(   String[]   args   ) 
                    { 
                      SampleManager   manager   =   SampleManager.getInstance(); 
                    } 
        } 
        

------------------------------------------------ 
附加说明 
Singleton设计模式设计时的要点在于: 
1:要有一个该类的instance作为class   member,   如例子中的   instance(也可以取另外的名字),   但不必一开始就实例化,可以使用lazy   intialize   技术; 
2:   把类的constructor设为private,以防止外部类调用; 
3:   实现对instance的调用,如例子中的   getInstance()方法,   至于是否要synchronize,   就要看所在的application中是否有multi   thread操作了。我一般加上synchronize 


建议参考 
< <thinking   in   Java   pattern> > 
< <Desing   pattern> >   of   GoF 
< <Java   Design   Pattern> > 这本书有3种,   一种是阎宏的,   一种是Cooper的,   还有一种记不起来作者了。 
  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值