HeadFirst设计模式--单例模式
来源:互联网 发布:mac虚拟机文件共享 编辑:程序博客网 时间:2024/05/21 10:42
单例模式
我们首先提出的疑问是什么是单例模式,为什么需要单例模式?
比如有的时候我们对一些对象只用一个,比如线程池。缓存等等。如何保障一个实例的运行呢?
或许我们可以使用全局变量,不过全局变量只能提供全局访问,不能确保只有一个实例。全局变量一旦多了,通常有的时候我们自己都忘记了。这点深有感触。看代码的时候也是特别的费劲。
单例模式确保一个类只有一个实例,并提供一个全局访问点。
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Singleton{ class Program { static void Main(string[] args) { Singleton singleton = Singleton.getInstance(); singleton.display(); Singleton1 second = Singleton1.getInstance(); second.display(); Console.ReadLine(); } } class Singleton { private static Singleton uniqueInstance; private Singleton() { } public static Singleton getInstance() { if (uniqueInstance==null) { uniqueInstance = new Singleton(); } return uniqueInstance; } public void display() { Console.WriteLine("这是单例模式"); } } //但是上面的方式有没有问题呢? //如果多线程的情况下,那么就会同时进入到getInstance函数中,同样还是会创建两个实例。 /// <summary> /// 这种方式也为“饿汉”模式,在声明类的时候就创建对象。 /// </summary> class Singleton1 { private static Singleton1 uniqueInstance = new Singleton1(); private Singleton1() { } public static Singleton1 getInstance() { return uniqueInstance; } public void display() { Console.WriteLine("饿汉模式单例"); } }}//要说明的是,利用单例模式,它的构造函数就必须为私有的,那么私有的构造函数主要作用是??//还有为什么使用静态的就能够确保只有一个实例了呢?
小结:要说明的是,利用单例模式,它的构造函数就必须为私有的。几个知识点的回顾
静态变量:在类中,用关键字static声明的为静态的,特点为:
1、在内存中仅占有一块内存。静态成员是属于整个类的,而不是属于某一个具体的类。
2、其中私有的静态成员函数不能被类外部函数和对象访问。
3、在编译时创建并初始化,也就是在类的任何对象被建立之前就存在。有static修饰的就是在编译时就被分配了内存,如Main函数
那么如果类中只有私有构造函数,则其它类无法创建该对象的实例。声明空的构造函数为了防止系统调用默认的构造函数。因此在上述代码中,只有通过getInstance这个函数才能够获得这个对象的唯一实例uniqueInstance。
0 0
- HeadFirst设计模式--单例模式
- HeadFirst 设计模式学习笔记5--单例模式
- HeadFirst 设计模式学习笔记5--单例模式
- HeadFirst 设计模式学习笔记5--单例模式
- HeadFirst 设计模式 5 单例模式(巧克力工厂)
- 《HeadFirst设计模式》读书笔记-第5章-单例模式
- HeadFirst设计模式_读书笔记_004_单例模式
- <HeadFirst设计模式>笔记——单例模式
- 【HeadFirst设计模式】单件模式
- Headfirst-7 单例模式
- 单例模式-HeadFirst学习
- 《HeadFirst设计模式》书摘-单例/命令/适配器/外观
- Delphi 设计模式:《HeadFirst设计模式》Delphi2007代码---单例模式之ChocolateBoiler
- HeadFirst设计模式学习笔记3-单件模式
- HeadFirst design pattern笔记-单例模式
- HeadFirst学习之单例模式
- HeadFirst设计模式
- HeadFirst -------- 设计模式要点
- 淘宝开放平台为移动开发者带来新蓝海
- linux so shared library
- 常用mysql命令
- 【数据结构】 三元组的转置
- 数据库索引原理
- HeadFirst设计模式--单例模式
- [042] 微信公众帐号开发教程第18篇-应用实例之音乐搜索
- sqlserver中的全局变量
- 简单工厂模式
- VC连接MySQL
- 关于socket通信时SIGPIPE的问题
- java中在map中存取值操作
- 单链表逆置
- [043] 微信公众平台开发教程第19篇-应用实例之人脸检测