现在的位置: 首页 > 综合 > 正文

我也设计模式——3.Singleton

2012年04月23日 ⁄ 综合 ⁄ 共 1202字 ⁄ 字号 评论关闭

Singleton的出现,取代了C++中全局变量——这个破坏OO封装性的概念。
使用场所:控制Socket通信,写日志,简单工厂。
实现Singleton的三个要点
1.私有化构造函数
2.保存实例的静态私有变量
3.访问这个实例的公共静态方法
实现如下:

    public class CSingleton
    
{
        
private static CSingleton mySingleton = null;

        
private CSingleton()
        
{

        }


        
public static CSingleton Instance()
        
{
            
if (mySingleton == null)
                mySingleton 
= new CSingleton();
            
return mySingleton;
        }


        
public void Do()
        
{
            
//Do something
        }

    }

Client端使用:
      CSingleton.Instance().Do();

例子1:单件窗体
点一下Menu,弹生一个弹出窗体(实例),在关闭这个新窗体之前,再次点击该Menu,不会再次出现同样的弹出窗体(实例)——Windows系统中的控制面板也是这个原理,永远只有一个。
代码如下:

        private static Form1 sf;

        
private Form1()
        
{
            InitializeComponent();
        }


        
public static Form1 Instance()
        
{
            
if(sf == null)
                sf 
= new Form1();

            
return sf;
        }


        
private void Form1_Closed(object sender, System.EventArgs e)
        
{
            
this.Dispose();
            sf 
= null;
        }

从而,无论在哪里调用Form1,都会得到相同的实例:
   Form1.Instance().Show();
——这里要确保Form1_Closed事件中清除窗体实例sf

单件是对类静态函数的一种改进。因为单件可以有子类,可以定义虚函数,具有多态性;静态函数就没有以上特性。

补注:
1.说到私有构造函数,其实还有另两种,保护型构造函数,静态构造函数,可以共存。

抱歉!评论已关闭.