前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式:单例模式

设计模式:单例模式

作者头像
lpxxn
发布2018-01-31 11:10:41
6720
发布2018-01-31 11:10:41
举报
文章被收录于专栏:技术之路技术之路

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

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

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

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

1.私有的构造方法

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

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

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

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

代码语言:javascript
复制
  public class singleClassDemo
    {
        private static singleClassDemo singleC;

        private singleClassDemo()
        {
        }

        private static singleClassDemo InitSingle()
        {
            if (singleC == null)
                singleC = new singleClassDemo();

            return singleC;
        }
    }

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

代码语言:javascript
复制
    public class singleClassDemo
    {
        private static singleClassDemo singleC = new singleClassDemo();

        private singleClassDemo()
        {
        }

        private static singleClassDemo InitSingle()
        {
            return singleC;
        }    
    }

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

代码语言:javascript
复制
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++代码

代码语言:javascript
复制
#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();
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2013-01-18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档