zoukankan      html  css  js  c++  java
  • 我也设计模式——3.Singleton

    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.说到私有构造函数,其实还有另两种,保护型构造函数,静态构造函数,可以共存。

  • 相关阅读:
    J
    I
    uva122 二叉树的实现和层次遍历(bfs)
    A
    HDU 波峰
    2239: 童年的圣诞树
    1734: 堆(DFS)
    1731: 矩阵(前缀和)
    1733: 旋转图像(模拟)
    1728: 社交网络(概率问题 组合数/排列数)
  • 原文地址:https://www.cnblogs.com/Jax/p/709576.html
Copyright © 2011-2022 走看看