设计模式:单例模式

设计模式系列目录

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

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

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

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

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

 

 

 

 

posted @ 2013-01-18 16:34  li-peng  阅读(1943)  评论(0编辑  收藏  举报