zoukankan      html  css  js  c++  java
  • 单例模式

    由于最近工作需要用到单实例模式,虽然以前对单实例模式有些了解,但却没有实际应用过,看了也就忘记了。再次熟悉一下:

    有时候,我们需要在程序运行整个过程中,为了效率问题或者用户体验,要求只产生对象的一个实例,这时候我们就需要用到单实例模式。

    例如:我们想在弹出对话框窗口时,不论用户触发多少次事件,当窗口存在时,只弹出一次。

    1:

    将弹出窗口Form1作为全局变量声明:Form1 frm1;

    在触发弹出窗口事件时判断Form1是否实例化,如果没有,实例化窗口弹出:

    if(frm1==null)

    {

      frm1=new Form();

      frm1.show();

    }

    但这时还是有问题,当我们关闭窗口后,再点击却不能在弹出窗口,因为在关闭窗口时,Form实例并没有为null而只是disposed。

    2:

    if(frm1==null||frm1.isdisposed)

    {

      frm1=new Form();

      frm1.show();

    }

    3:为了提高代码的重用性,将方法写成单独一个方法。

    public void OpenForm()

    {  

    if(frm1==null||frm1.isdisposed)

    {

      frm1=new Form();

      frm1.show();

    }

    }

    4:为了体现代码的封装性,我们将对窗口的实例化写进需要弹出的窗体中。

    private static Form1 frm1=null;

    private Form1()

    {

      InitializeComponent();

    }

    //构造方法私有,外部代码不能通过new来实例化。

    public static Form1 GetInstance()

    {

    if(frm1==null||frm1.isdisposed)

    {

      frm1=new Form();

    }

    return frm1;

    }

    到此,我们再总结一下:什么是单例模式?就是一个类只有一个实例,并提供一个访问它的全局访问点。

    如何才能是一个全局变量被访问并且防止被实例化为多个对象?最好的方法是让类负责保存它的唯一实例,这个类可以保证没有其他的类可以创建,并且提供一个公共方法访问该实例。

    寻找突破。。。
  • 相关阅读:
    leetcode 15. 三数之和
    leetcode 168. Excel表列名称
    142. 环形链表 II
    144. 二叉树的前序遍历(非递归)
    415. 字符串相加
    剑指 Offer 31. 栈的压入、弹出序列
    剑指 Offer 27. 二叉树的镜像
    剑指 Offer 29. 顺时针打印矩阵
    剑指 Offer 10- II. 青蛙跳台阶问题
    VBA 实现excel单元格多选
  • 原文地址:https://www.cnblogs.com/iskyoole/p/2545721.html
Copyright © 2011-2022 走看看