设计模式:单例模式

设计模式系列目录

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

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

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

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

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<iostream>

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 <string>

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

原文链接: https://www.cnblogs.com/li-peng/archive/2013/01/18/2866629.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/76029

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月9日 下午5:18
下一篇 2023年2月9日 下午5:19

相关推荐