• 单例模式


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

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

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

    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;

    }

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

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

    寻找突破。。。
  • 相关阅读:
    Spring 中的邮件任务
    Spring 定时任务
    java中同步交互 与 异步交互
    Springboot 版本包冲突
    Derby 配置环境变量
    Springboot中的Web服务Tomcat改为Jetty
    二叉树中和为某一值的路径
    0-Java中this和super的用法总结
    树9:二叉搜索树的后序遍历
    位运算-输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
  • 原文地址:https://www.cnblogs.com/iskyoole/p/2545721.html
Copyright © 2020-2023  润新知