文章目录

  • 单例模式的特点
  • 单例模式的C++实现
    • 0.targrtver.h
    • 1. stdafx.h 和stdafx.cpp
      • stdafx.h
      • stdafx.cpp
    • 2. Singleton.h 和Singleton.cpp
      • Singleton.h
      • Singleton.cpp
    • 3. SingletonMode.cpp
  • 单例模式的Java实现
    • 1. Singleton.java
    • 2. Main.java
    • 3. 在vscode上编译运行的实现效果

单例模式的特点

单例模式有以下特点:

  1. 单例类只能有一个实例。
  2. 单例类必须自己创建自己的唯一实例。
  3. 单例类必须给所有其他对象提供这一实例。

单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。 这些应用都或多或少具有资源管理器的功能。
每台计算机可以有若干个打印机,但只能有一个Printer Spooler,以避免两个打印作业同时输出到打印机中。
每台计算机可以有若干通信端口,系统应当集中管理这些通信端口,以避免一个通信端口同时被两个请求同时调用。
总之,选择单例模式就是为了避免不一致状态,避免政出多头。


单例模式的C++实现


0.targrtver.h

#pragma once
// 以下宏定义要求的最低平台。要求的最低平台
// 是具有运行应用程序所需功能的 Windows、Internet Explorer 等产品的
// 最早版本。通过在指定版本及更低版本的平台上启用所有可用的功能,宏可以
// 正常工作。// 如果必须要针对低于以下指定版本的平台,请修改下列定义。
// 有关不同平台对应值的最新信息,请参考 MSDN。
#ifndef _WIN32_WINNT            // 指定要求的最低平台是 Windows Vista。
#define _WIN32_WINNT 0x0600     // 将此值更改为相应的值,以适用于 Windows 的其他版本。
#endif

1. stdafx.h 和stdafx.cpp

stdafx.h

// stdafx.h : 标准系统包含文件的包含文件,
// 或是经常使用但不常更改的
// 特定于项目的包含文件
//#pragma once#include "targetver.h"#include <stdio.h>
#include <tchar.h>// TODO: 在此处引用程序需要的其他头文件

stdafx.cpp

// stdafx.cpp : 只包括标准包含文件的源文件
// SingletonMode.pch 将作为预编译头
// stdafx.obj 将包含预编译类型信息#include "stdafx.h"// TODO: 在 STDAFX.H 中
// 引用任何所需的附加头文件,而不是在此文件中引用

2. Singleton.h 和Singleton.cpp

Singleton.h

#pragma onceclass Singleton
{public:~Singleton(void);static Singleton * GetInstance();
private:Singleton(void);//把复制构造函数和=操作符也设为私有,防止被复制Singleton(const Singleton &s);Singleton& operator=(const Singleton &s);};

Singleton.cpp

#include "StdAfx.h"
#include "Singleton.h"  Singleton::Singleton(void)
{}Singleton::~Singleton(void)
{}Singleton * Singleton::GetInstance()
{static Singleton s;return &s;
}

3. SingletonMode.cpp

#include "stdafx.h"
#include <stdlib.h>
#include <iostream>
#include "Singleton.h"using namespace std;int _tmain(int argc, _TCHAR* argv[])
{Singleton * p1 = Singleton::GetInstance();Singleton * p2 = Singleton::GetInstance();if( p1 == p2 ){cout << "返回的是同一个实例" << endl;}else{cout << "返回的不是同一个实例" << endl;}system("pause");return 0;
}

单例模式的Java实现

1. Singleton.java

public class Singleton {private static Singleton singleton = new Singleton();private Singleton() {                                 System.out.println("生成了一个实例。");}public static Singleton getInstance() {return singleton;}
}

2. Main.java

public class Main {public static void main(String[] args) {System.out.println("Start.");Singleton obj1 = Singleton.getInstance();Singleton obj2 = Singleton.getInstance();if (obj1 == obj2) {System.out.println("obj1与obj2是相同的实例。");} else {System.out.println("obj1与obj2是不同的实例。");}System.out.println("End.");}
}

3. 在vscode上编译运行的实现效果

设计模式[3] -单例模式-代码相关推荐

  1. php单例模式代码,php设计模式之单例模式代码

    /** * php设计模式 单例模式 */ class Fruit{ private static $instanceMap = array(); //protected getter for sin ...

  2. socket可以写成单例嘛_精读《设计模式 - Singleton 单例模式》

    Singleton(单例模式) Singleton(单例模式)属于创建型模式,提供一种对象获取方式,保证在一定范围内是唯一的. 意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 其实单例模 ...

  3. 设计模式(一) 单例模式

    2019独角兽企业重金招聘Python工程师标准>>> Hello 设计学习应用,好记性不如烂笔头,强调不是学习和小试牛刀,通过几遍文章资料,通过几段固定的代码就可以把设计模式的思想 ...

  4. C#设计模式(1)——单例模式

    原文地址:http://www.cnblogs.com/zhili/p/SingletonPatterm.html 一.引言 最近在设计模式的一些内容,主要的参考书籍是<Head First 设 ...

  5. java设计模式之单例模式(七种方法)

    单例模式:个人认为这个是最简单的一种设计模式,而且也是在我们开发中最常用的一个设计模式. 单例模式的意思就是只有一个实例.单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个 ...

  6. 一篇博客读懂设计模式之---单例模式

    一篇博客读懂设计模式之---单例模式 一.  单例模式 单例对象(Singleton)是一种常用的设计模式.在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在.这样的模式有几个好处 ...

  7. socket可以写成单例嘛_精读设计模式 Singleton 单例模式

    Singleton(单例模式) Singleton(单例模式)属于创建型模式,提供一种对象获取方式,保证在一定范围内是唯一的. 意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 其实单例模 ...

  8. 实践GoF的设计模式:单例模式

    本文分享自华为云社区<[Go实现]实践GoF的23种设计模式:单例模式>,作者: 元闰子. 简述 GoF 对单例模式(Singleton)的定义如下: Ensure a class onl ...

  9. java connection 单例_Java设计模式之单例模式详解

    Java设计模式之单例模式详解 什么是设计模式 设计模式是在大量的实践中总结和理论之后优选的代码结构,编程风格,以及解决问题的思考方式.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可 ...

最新文章

  1. c 语言 声明 定义,C/C++语言声明与定义详解
  2. java 使用正则表达式从网页上提取网站标题
  3. 异常检测——局部异常因子(Local Outlier Factor ,LOF)算法
  4. 数据挖掘Apriori算法
  5. java自动猜测文件编码
  6. 程序员面试金典 - 面试题 16.04. 井字游戏(计数)
  7. Android应用程序变量
  8. R沟通|Bookdown中文书稿写作手册(中)
  9. oracle中print,oracle中print_table存储过程实例介绍
  10. 利用微信官方文档下载微信对账单、资金账单
  11. 如何将单页面转化成手机版_【Mac分享】全套Adobe for mac(pojie版)
  12. Deinterlacer(影像解交错)概念与解析
  13. robotframework-给定日期推算星期几
  14. 【BUUCTF】[MRCTF2020]套娃
  15. Linux rpm 文件安装
  16. 智能窗帘定时程序c语言,基于单片机智能窗帘控制系统设计
  17. 慧驱动正弦高频注入FOC学习笔记
  18. 梁昌勇 软件工程_梁昌勇简介_研究领域_学术成果_合肥工业大学管理学院教授-教师点评 - 人大经济论坛...
  19. 石墨烯/PEDOT 水凝胶
  20. 电力电子技术:电力电子器件

热门文章

  1. Day11多态部分-1 【1.1 多态的体现】
  2. [网络安全自学篇] 十八.XSS跨站脚本攻击原理及代码攻防演示(一)
  3. [Android] SQLite数据库之增删改查基础操作
  4. 394. Decode String
  5. Django 使用 HttpResponse 返回 json 字符串显示 Unicode 编码
  6. wireshark抓包数据:理解与分析
  7. 【Qt】QModbusDataUnit类
  8. [Ubuntu] Ubuntu系统环境变量详解
  9. [Qt教程] 第31篇 网络(一)Qt网络编程简介
  10. php rsa验证签名,php利用openssl实现RSA非对称加密签名验证