本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/8250985.html,记录一下学习过程以备后续查用。
一、引言
设计模式的分类:
1)依目的:
创建型(Creational)模式:负责对象创建
结构型(Structural)模式:处理类与对象间的组合
行为型(Behavioral)模式:类与对象交互中的职责分配
2)依范围:
类模式:处理类与子类的静态关系
对象模式:处理对象间的动态关系
注:本系列文章依目的分类来进行。
二、单例模式的介绍
单例模式:英文名称--Singleton Pattern;分类--创建型;定义--一个类仅有一个实例。
2.1、动机(Motivate)
在软件系统中,经常有这样一些特殊的类,必须保证它们在系统中只存在一个实例,才能确保它们的逻辑正确性、以及良好的效率。
如何绕过常规的构造器,提供一种机制来保证一个类只有一个实例?这应该是类设计者的责任,而不是使用者的责任。
2.2、意图(Intent)
保证一个类仅有一个实例,并提供一个该实例的全局访问点。--《设计模式GoF》
2.3、结构图(Structure)
2.4、模式组成
这个模式里面只有一个类型,就是Singleton类型,并且这个类只有一个实例,可以通过Instance()方法获取该类型的实例。
2.5、代码实现
既然是单实例,肯定会涉及到多线程的问题。
2.5.1单线程Singleton模式的实现
class Program { /// <summary> /// 单例模式的实现 /// </summary> public sealed class Singleton { //定义一个静态变量来保存类的实例 private static Singleton uniqueInstance; //定义私有构造函数,使外界不能创建该类实例。 private Singleton() { Console.WriteLine("Singleton对象已被创建。"); } /// <summary> /// 定义公有方法提供一个全局访问点,也可以定义公有属性来提供全局访问点。 /// </summary> /// <returns></returns> public static Singleton GetInstance() { //如果类的实例不存在则创建,否则直接返回。 if (uniqueInstance == null) { uniqueInstance = new Singleton(); } return uniqueInstance; } } static void Main(string[] args) { #region 单例模式 var singleton = Singleton.GetInstance(); Console.Read(); #endregion } }