zoukankan      html  css  js  c++  java
  • 单例模式 理解,简单通透

    一、引言

           我在博客园的个人博客是今年2月份申请的,但是到现在一片文章都没有写,都有点感觉对不起这个博客(有点装。。哈哈)。好,话不多说,这篇文章里面给大家介绍23种设计模式中的第一种设计模式——单例模式。

    二、单例模式

     说到单例模式,大家的第一反应应该是——什么是单例模式。单例模式的定义,官方的定义总结起来就两句话,确保一个类只有一个实例(也就是类的对象),并且提供一个全局的访问点(外部通过这个访问点来访问该类的唯一实例)。  哈哈,是不是有点懵了,没关系,正常! 单例模式的实现其实只有两行代码,定义里面的这两句话分别对应一句代码。我在这里不解释这个定义,我们用代码来说话。我在这里新建一个控制台应用程序来给大家介绍单例模式。 看到这里大家应该能明白,单例模式的实现代码了吧。

    namespace _01单例模式
    {
        class Program
        {
            static void Main(string[] args)
            {
                //我们在外部通过全局访问点去访问该类的唯一实例
                Singleton s = Singleton.only;
            }
        }
        public class Singleton//单例类
        {
            //2.提供一个全局访问点(其实就是一个全局静态字段),外部可以通过该字段访问该类的唯一实例
            //因为静态字段是属于类的,所以这样可以保证只有一个实例。
            public static Singleton only = new Singleton();
            //1 将构造函数声明成私有的,这样可以确保在类的外部无法实例化该类(即在类的外部获取不到类的实例)
            private Singleton() 
            {
            }
        }
    }

    第一步:将类的构造函数生命为私有的构造函数,这样我们在外部就无法通过Singleton s = new Singleton()来实例化该,因为Private生命的成员只有在该类的内部可以访问。这样可以保证类的实例只有一个(那就是在类的内部给它实例化)。

          第二步:在类的里面声明一个公开的全局的静态字段(其实也就是提供一个全局的访问点),外部对象通过这个访问点可以拿到该类的唯一实例。切记,该字段必须声明成static静态段,如果声明成非静态字段,那在类的外部就访问不到了。因为非静态成员只能通过类的实例去访问,而我们在类的外部是无法对该类进行实例化的。

          接下来的就是第二个问题,单例模式的作用是什么呢?其实定义单例模式的定义已经给了我们答案,作用就是——使得类的一个对象成为系统中的唯一实例。说了好像和没说一样吧,举个例子你就知道他有什么好处了。一个操作系统中可以存在多个打印任务,但我们只有一个打印机,同一时间只能有一个正在工作的任务,这个时候内存中打印机的这个类就必须是单例的,否则的话就可以同时执行多个打印任务,这显然会造成错误。

  • 相关阅读:
    利用读写锁实现缓存系统
    POJ 1338 Ugly Numbers
    copy算法
    它们的定义iOS双击Home截图按键开关
    以正能量的点!!!
    该公路项目
    ArcSDE当关系查询ArcMap与REST查询结果不一致问题的解决
    【OpenCV新手教程第14】OpenCVHough变换:霍夫变换线,霍夫变换圆汇编
    为了树莓派IIraspberrypi安装emacs+ecb+cedet+session+color-theme+cscope+linum
    事件总线帧---Otto
  • 原文地址:https://www.cnblogs.com/ning-blogs/p/5020141.html
Copyright © 2011-2022 走看看