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

  • 相关阅读:
    使用图形化界面打包自己的类库
    搭建自己的NuGet服务器,上传自定义NuGet包
    在内部架设NuGet服务器
    Prism简介
    Nhibernate Icreteria 分页查询
    uDig介绍
    基于Geoserver配置多图层地图以及利用uDig来进行样式配置
    如何在GeoServer上发布一张地图
    XML的SelectNodes使用方法以及XPath
    coded ui run in interactive mode
  • 原文地址:https://www.cnblogs.com/Jax/p/709576.html
Copyright © 2011-2022 走看看