设计模式:单例模式
发布日期:2021-05-09 04:30:26 浏览次数:18 分类:博客文章

本文共 2632 字,大约阅读时间需要 8 分钟。

今天来简单来说一下单例模式:它要确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。

比如我们登录一个系统的时候要记录一个员工的信息,在整个系统运行过程中可能要不段的访问这个员工的信息,

一般情况下我们会有两种做法,第一种建一个静态类,第二种就是今天我要说的键一个单例类

今天只说单例类,建单例类要有几个要求

1.私有的构造方法

2.指向自己实例的私有静态引用

3.以自己为实例为返回值的静态方法

单例模式实例化对象有两种方式

1.懒汉模式:调用取得实例方法的时候才去实例化对象

public class singleClassDemo    {        private static singleClassDemo singleC;        private singleClassDemo()        {        }        private static singleClassDemo InitSingle()        {            if (singleC == null)                singleC = new singleClassDemo();            return singleC;        }    }

2.饿汉模式:单例类被加载时候实例化对象

public class singleClassDemo    {        private static singleClassDemo singleC = new singleClassDemo();        private singleClassDemo()        {        }        private static singleClassDemo InitSingle()        {            return singleC;        }        }

 做一个小例子:保存员工的名字和ID

public class Program    {        static void Main(string[] args)        {            singleClass s1 = singleClass.getSingleClass();            singleClass s2 = singleClass.getSingleClass();   //已经实例化过一次了不会再实例化了                                Console.ReadLine();        }    }    public class singleClass    {        private static singleClass singleC = new singleClass();        private singleClass()// 在整个程序运行过程中只实例化一次        {            id = "001";            name = "ERP";            Console.WriteLine("singleClass run");        }        public static singleClass getSingleClass()        {                        return singleC;        }        private static string id;        public static string ID        {            get            {                return id;            }        }        private static string name;        public static string Name        {            get            {                return name;            }        }    }

  

c++代码

#pragma once#include
class SingleClassDemo{public: static SingleClassDemo * initSingleClass(); std::string getName();private: explicit SingleClassDemo(); static SingleClassDemo * singleClass; std::string m_name;};#include "stdafx.h"#include "singleClassDemo.h"#include
SingleClassDemo * SingleClassDemo::singleClass = nullptr;SingleClassDemo * SingleClassDemo::initSingleClass(){ if (singleClass == nullptr) { singleClass = new SingleClassDemo(); } return singleClass;}std::string SingleClassDemo::getName(){ if (m_name.empty()) { m_name = "boke"; } return m_name;}SingleClassDemo::SingleClassDemo(){}//main SingleClassDemo * s = SingleClassDemo::initSingleClass(); std::cout << s->getName(); std::cin.get();
View Code

 

 

 

 

上一篇:sql 时间总结
下一篇:sql 表有没有自增列,插入自增列值

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2025年04月07日 02时34分11秒