学习设计模式也有一段时间了,看了些书籍也一直在园子里关注设计模式的文章,无奈动手比较少,仅仅几个设计模式拿来应用过,其它的基本上仅限于了解概念而已。悲哉!悲哉!前阵子在项目里居然发现可以应用单例模式,呵呵,颇有些惊喜。故写下面的。以此巩固和梳理自己的知识,加深理解。
什么叫单例模式? 单例模式又叫做单态模式或者单件模式
概念1(GOF):单例模式(Single)是指保证一个类仅有一个实例,并提供一个访问它的全局访问点
概念2:单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类
单例模式又分为:
一 懒汉式单例:在类被加载的时候,唯一实例已经被创建
二、饿汉式单例 在类加载的时候不创建单例实例。只有在第一次请求实例的时候的时候创建,并且只在第一次创建后,以后不再创建该类的实例。
三、登记式单例 这个单例实际上维护的是一组单例类的实例,将这些实例存放在一个Map(登记薄)中,对于已经登记过的实例,则从工厂直接返回,对于没有登记的,则先登记,而后返回。
单例类的特点:
1、单例类只能有一个实例
2、单例类必须自己给自己创建自己的唯一的实例
3、单例类必须给其他所有对象提供这一实例
一个类的对象的产生是由类构造函数来完成的,如果想限制对象的产生,就要将构造函数变为私有的(至少是受保护的),使得外面的类不能通过引用来产生对象;同时为了保证类的可用性,就必须提供一个自己的对象以及访问这个对象的静态方法。通常我们可以让一个全局变量使得一个对象被访问。但它不能防止你实例化多个对象,一个最好的方法就是,让类自身保存它的唯一实例,这个类可以保证没有其它实例可以被创建,并且它可以提供一个访问改实例的方法
什么时候用单例模式?当某个类的初始化比较耗时,耗资源的时候,比如加载某些配置文件等,一般会选择单例模式。
单例模式一般用在你不想实例化多个对象的地方 ,比如WinForm里MDI窗口内的子窗体。