单例模式

设计模式系列目录

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

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

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

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

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();



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值