
设计模式:单例模式
View Code
发布日期: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#includeclass 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();
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2025年04月07日 02时34分11秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
k8s之PV、PVC、StorageClass详解
2019-03-06
一文带你认识Docker
2019-03-06
你真的了解Innodb存储引擎?
2019-03-06
FeWeb基础之JavaScript简介
2019-03-06
设计模式学习笔记(二十三:解释器模式)
2019-03-06
使用MongoDB和JSP实现一个简单的购物车系统
2019-03-06
算法笔记_069:Floyd算法简单介绍(Java)
2019-03-06
算法笔记_075:蓝桥杯练习 最短路(Java)
2019-03-06
from flask.ext.wtf import Form导入报错
2019-03-06
Python学习笔记_05:使用Flask+MySQL实现用户登陆注册以及增删查改操作
2019-03-06
Deepin_使用Python+MySQL创建工作日志记录
2019-03-06
dpdk在虚拟机上出错处理
2019-03-06
Nagios 系统监控基本安装配置过程详解
2019-03-06
Macbook 彻彻底底的卸载MySQL
2019-03-06
ASP.NET Core 一步步搭建个人网站(4)_主页和登录验证
2019-03-06
SSIS 转移数据库和SQL Server对象组件
2019-03-06
NumPy 学习 第四篇:数组的基本操作
2019-03-06
SQL Server 列存储索引 第二篇:设计
2019-03-06
ADF 第五篇:转换数据
2019-03-06
Databricks 第4篇:pyspark.sql 分组统计和窗口
2019-03-06