设计模式:单例模式
时间:2022-04-25
本文章向大家介绍设计模式:单例模式,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
今天来简单来说一下单例模式:它要确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
比如我们登录一个系统的时候要记录一个员工的信息,在整个系统运行过程中可能要不段的访问这个员工的信息,
一般情况下我们会有两种做法,第一种建一个静态类,第二种就是今天我要说的键一个单例类
今天只说单例类,建单例类要有几个要求
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();
- maven配置详解
- 这一新的可视化方法教你优雅地探索相关性
- LSTM Networks在股票市场上的探究
- MSBuild的简单介绍与使用
- actionbar详解(二)
- actionbar完全解析(一)
- android galley实现画廊效果
- RavenDB:基于Windows/.NET平台的NoSQL数据库
- 神经网络算法交易:波动预测与定制损失函数
- 贝叶斯深度学习:桥接PyMC3和Lasagne构建层次神经网络
- How does it work in Mono's C# compiler?
- Cross-Origin Resource Sharing协议介绍
- 战斗民族开源神器ClickHouse:一款适合于构建量化回测研究系统的高性能列式数据库(二)
- Microsoft StreamInsight 构建物联网
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- tensorflow 动态获取 BatchSzie 的大小实例
- TP5.0框架实现无限极回复功能的方法分析
- Tensorflow之MNIST CNN实现并保存、加载模型
- tensorflow 大于某个值为1,小于为0的实例
- YII框架模块化处理操作示例
- 基于tensorflow for循环 while循环案例
- 浅谈Python 命令行参数argparse写入图片路径操作
- 硬核干货丨游戏大世界的超远视距处理手法,建议收藏!
- python实现npy格式文件转换为txt文件操作
- 从0开始打造UI框架:动态化框架Scrollview物理学算法解析
- 基于Keras的格式化输出Loss实现方式
- PHP信号处理机制的操作代码讲解
- php防止表单重复提交实例讲解
- Python实现封装打包自己写的代码,被python import
- 创建一个 Serverless 应用,真的没有这么难!