`

深入浅出单例模式

阅读更多

从现在看来,学习设计模式是很久之前的事了,刚开始的时候对设计模式的理解真的很浅,基本就是处于表面,不知道怎么在系统中应用。现在小组开始合作做系统了,在系统中使用设计模式,能更好的实现代码复用,让自己的系统更好的做到低耦合高内内,同时对于后期的扩展和维护也更加的方便。

这篇博客我们主要重新回顾和认识单例模式:

 

单例模式(Singleton):

 

保证一个类仅有一个实例,并提供一个访问它的全局访问点。

 

结构图:

 


C#语言的实现代码:

 

<span style="font-family:Microsoft YaHei; font-size:18px">class Singleton
    {
        //定义一个私有变量,保存创建的实例
        private static Singleton instance;
        //私有的构造方法,外界不能利用New创建此类实例
        private Singleton () 
        {
        }
        //提供一个静态方法,用于返回唯一的Singleton实例
        public static Singleton GetInstance()
        {
            //如果instance为null,表明还没有创建Singleton对象
            //如果instance不为null,则表明已经创建了Singleton对象,将不会执行该方法
            if (instance == null) 
            {
                //创建一个Singleton对象,并将缓存起来
                instance = new Singleton();
            }
            return instance;
        }
    }</span>
<span style="font-family:Microsoft YaHei; font-size:18px"> //客户端代码
        static void Main(string[] args)
        {
            //创建Singleton对象不能通过构造器,只能通过getInstance方法
            Singleton s1 = Singleton.GetInstance();
            Singleton s2 = Singleton.GetInstance();

            if (s1 == s2) //比较两次实例化对象的结果是实例相同
            {
                Console.WriteLine("两个对象是相同的实例。");
            }
            Console.Read();
        }</span>

 

下面我们使用vb.net语言,实现单例模式

 

首先建立一个Windows应用程序,默认的窗体为Form1,设置它的ISMdiContainer属性为true,表示它是一个多文档界面MdI子窗体的容器。然后建立button按钮,我们再创建一个窗体ChildForm,单击就创建一个子窗体。

在没有使用单例模式的时候,子窗体会显示多个(如图1),但这并不是我们想要的结果,我们想要图2中显示的,无论单击多少次,只显示一个子窗体,此时我们就用到了单例模式。

图1

图2

 

下面我们按照我们上面的代码照葫芦画瓢就好。

 

 

Public Class ChildForm
    ' 定义一个私有变量,保存创建的实例
    Private Shared instance As ChildForm
    '私有的构造方法,外界不能利用New创建此类实例(我们没有写),所有类都有构造方法,不编码则系统默认生成空的构造方法
    ' 提供一个静态方法,用于返回唯一的Singleton实例
    Public Shared Function CreateForm() As ChildForm
        '如果instance不存在或关闭时, 表明还没有创建ChildForm对象
        '如果instance存在时, 则表明已经创建了ChildForm对象, 将不会执行该方法
        If instance Is Nothing OrElse instance.IsDisposed = True Then
            '创建一个ChildForm对象,并将缓存起来
            instance = New ChildForm
            instance.MdiParent = Form.ActiveForm
        End If
        Return instance '返回实例化结果
    End Function
End Class
'客户端代码
Public Class Form
    Private Sub btnShow_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnShow.Click
        '单击显示子窗体
        ChildForm.CreateForm().Show()
    End Sub
End Class

 

单例模式的优点和缺点:

 

优点:

1、保证该类只有唯一的实例。

2、该类自身负责保存实例,并保证没有其他实例可以被创建。

3、向整个系统公开实例接口,对唯一实例的受控访问。

所有的设计模式都是一样的,既有优点也有缺点,我们利用它的优点的同时,不能忽略他的缺点,在多线程的程序中,多个线程同时访问,会造成创建多个实例,存在不安全问题。

分享到:
评论

相关推荐

    深入浅出单例Singleton模式

    【深入浅出单例Singleton模式】 单例模式是一种在软件设计中常见的设计模式,它的核心目标是确保一个类只有一个实例,并提供一个全局访问点。在Java等面向对象编程语言中,单例模式常用于控制资源的共享,如全局...

    深入浅出设计模式之单件模式

    ### 深入浅出设计模式之单件模式 #### 一、单件模式概述 单件模式(Singleton Pattern)是软件设计模式中最为常见的一种,它的主要目标是确保某个类只有一个实例,并提供一个全局访问点。单件模式在很多情况下都...

    深入浅出设计模式(中文版)

    《深入浅出设计模式》是一本面向Java开发者的专业书籍,旨在帮助读者理解并熟练应用设计模式。设计模式是软件工程中的重要概念,它总结了在特定情境下解决常见问题的最佳实践,是经验丰富的开发者们智慧的结晶。这...

    深入浅出java设计模式(高清中文PDF)

    《深入浅出Java设计模式》是一本专注于Java编程领域中的设计模式专著,旨在帮助开发者深化对设计模式的理解,提高代码质量和可维护性。设计模式是软件开发中经过时间检验的解决方案,它们是解决常见问题的最佳实践。...

    深入浅出设计模式附书源码Java版源码

    深入浅出设计模式附书源码Java版源代码,是面向Java开发者的宝贵资源,旨在帮助他们理解和实践各种设计模式。这本书籍的源代码提供了实际的示例,使得学习过程更具互动性和实践性。 设计模式的核心思想是将常见的...

    深入浅出设计模式C#Java版

    本资源"深入浅出设计模式C#Java版"是针对这两种主流编程语言介绍设计模式的经典著作,旨在帮助开发者理解和应用这些模式。 1. **单例模式**:确保一个类只有一个实例,并提供全局访问点。在C#中,可以使用`密封`和`...

    深入浅出设计模式

    《深入浅出设计模式》是一本专注于讲解设计模式的书籍,其内容旨在帮助读者深入理解并熟练运用设计模式。设计模式是软件开发中的一种最佳实践,是解决常见问题的模板,能够提高代码的可读性、可维护性和复用性。这...

    深入浅出设计模式.rar

    《深入浅出设计模式》这个压缩包文件很可能是为了帮助读者理解和掌握设计模式的核心理念与应用场景,从而提升软件开发的效率和质量。 在软件开发过程中,设计模式如同一种通用的语言,让开发者能够快速交流复杂的...

    深入浅出设计模式.pdf

    《深入浅出设计模式》是一本关于软件设计的经典著作,主要涵盖了面向对象设计中的核心设计模式。这本书旨在帮助读者理解并掌握如何在实际编程中应用这些模式,提升代码的可维护性和可扩展性。设计模式是经过时间和...

    c#深入浅出设计模式

    《C#深入浅出设计模式》是一本专为C#开发者设计的全面解析设计模式的著作。设计模式是软件工程中的一种最佳实践,是解决常见问题的模板化解决方案,能够帮助开发者更高效、灵活地编写代码。这本书详细阐述了23种经典...

    深入浅出设计模式2.rar中文版

    《深入浅出设计模式》是面向软件开发人员的一本经典著作,主要讲解了设计模式这一重要概念。设计模式是软件工程中的一种最佳实践,它在解决常见问题时提供了可复用的解决方案。第二章通常会深入探讨一些基础的设计...

    深入浅出设计模式 pdf

    《深入浅出设计模式》是一本深受程序员喜爱的经典著作,它详细阐述了设计模式这一软件工程中的重要概念。设计模式是解决在软件开发过程中常见问题的成熟解决方案,它基于面向对象编程思想,能够提高代码的可重用性、...

    深入浅出设计模式(英文扫描版)

    标题:“深入浅出设计模式(英文扫描版)” 描述:“可以了解设计模式 还可以学习英文~~” 标签:“设计模式” 从上述信息中,我们可以提炼出以下关键知识点: ### 设计模式简介 设计模式是在软件工程领域中,...

    深入浅出设计模式(HEAD_FIRST设计模式)电子书+java代码

    《深入浅出设计模式》是基于HEAD FIRST系列的著名设计模式教程,专为初学者打造,旨在用生动直观的方式帮助读者理解复杂的设计模式概念。这本书以其独特的图文并茂的讲解方式,使得学习过程更为轻松有趣。书中涵盖了...

    小D深入浅出设计模式+框架源码剖析实战

    │ 3.4单例模式中的饿汉实现和选择问题.mp4 │ 3.5JDK源码里面的单例设计模式.mp4 │ 4.2电商支付应用案例-简单工厂模式实践指南.mp4 │ 5.1-创建型设计模式-Prototype原型设计模式实战《上》.mp4 │ 5.2-创建...

    深入浅出设计模式 C++ 源码 + 设计模式 C++

    本资料包包含“深入浅出设计模式 C++”的源码和相关教材,旨在帮助开发者理解和应用设计模式。 一、设计模式的重要性 设计模式不仅提供了可重用的代码结构,还促进了团队间的沟通和代码的可维护性。它们是经验丰富...

    深入浅出设计模式(源代码c# 和JAVA)

    《深入浅出设计模式》是一本旨在帮助开发者理解和应用设计模式的经典书籍,它提供了C#和JAVA两种语言的源代码实现,使得学习者可以通过实际操作来加深对设计模式的理解。 1. **设计模式的基本概念**: 设计模式...

Global site tag (gtag.js) - Google Analytics