1、引言设计模式
我在博客园的我的博客是今年2月份申请的,可是到如今一片文章都没有写,都有点感受对不起这个博客(有点装。。哈哈)。好,话很少说,这篇文章里面给你们介绍23种设计模式中的第一种设计模式——单例模式。函数
2、单例模式
spa
说到单例模式,你们的第一反应应该是——什么是单例模式。单例模式的定义,官方的定义总结起来就两句话,确保一个类只有一个实例(也就是类的对象),而且提供一个全局的访问点(外部经过这个访问点来访问该类的惟一实例)。 哈哈,是否是有点懵了,不要紧,正常! 单例模式的实现其实只有两行代码,定义里面的这两句话分别对应一句代码。我在这里不解释这个定义,咱们用代码来讲话。我在这里新建一个控制台应用程序来给你们介绍单例模式。 看到这里你们应该能明白,单例模式的实现代码了吧。操作系统
namespace _01单例模式 { class Program { static void Main(string[] args) { //咱们在外部经过全局访问点去访问该类的惟一实例 Singleton s = Singleton.only; } } public class Singleton//单例类 { //2.提供一个全局访问点(其实就是一个全局静态字段),外部能够经过该字段访问该类的惟一实例 //由于静态字段是属于类的,因此这样能够保证只有一个实例。 public static Singleton only = new Singleton(); //1 将构造函数声明成私有的,这样能够确保在类的外部没法实例化该类(即在类的外部获取不到类的实例) private Singleton() { } } }
第一步:将类的构造函数生命为私有的构造函数,这样咱们在外部就没法经过Singleton s = new Singleton()来实例化该,由于Private生命的成员只有在该类的内部能够访问。这样能够保证类的实例只有一个(那就是在类的内部给它实例化)。设计
第二步:在类的里面声明一个公开的全局的静态字段(其实也就是提供一个全局的访问点),外部对象经过这个访问点能够拿到该类的惟一实例。切记,该字段必须声明成static静态段,若是声明成非静态字段,那在类的外部就访问不到了。由于非静态成员只能经过类的实例去访问,而咱们在类的外部是没法对该类进行实例化的。code
接下来的就是第二个问题,单例模式的做用是什么呢?其实定义单例模式的定义已经给了咱们答案,做用就是——使得类的一个对象成为系统中的惟一实例。说了好像和没说同样吧,举个例子你就知道他有什么好处了。一个操做系统中能够存在多个打印任务,但咱们只有一个打印机,同一时间只能有一个正在工做的任务,这个时候内存中打印机的这个类就必须是单例的,不然的话就能够同时执行多个打印任务,这显然会形成错误。对象