创建型模式——单例模式(Singleton Pattern)

开头

      今天我们学习单例模式,所谓的单例模式就是一个类只能实例化一次,也就是说只能创建一次对象,我们拿我们的电脑为例,当我们调用个性化窗口的时候,无论通过什么方式调用出来,只出现一个个性化的窗口,这样的窗口就具有唯一性,如果每调用一次就出现一个这样的窗口,系统就会不停的为该进程分配内存,导致系统内存资源得到极大的浪费,而且多个窗口都是一致的,对我们毫无意义。


内容

单例模式具有唯一性,为确保其唯一性我们需要注意以下两点:

(1)防止外界创建实例对象,对象只能在内部创建,所以对象的构造函数可见性改为Private

 //new关键字来实例化,确保只实例化一次,防止外界直接通过构造函数来创建对象,构造函数的可见性改为private,但是内部可以创建对象
 private Singleton(){ }

(2)对象的创建在内部,但是外界需要进行访问,则需要定义一个静态的对象类型的私有成员变量,并且增加一个公有的静态方法。

 //函数用private声明以后,只有内部可以创建实例,为使外部访问这个唯一的实例,需要定义一个静态的singleton类型的私有成员变量
 private static Singleton uniqueInstance;
       
 //为了保证成员变量的封装性,为了是外界使用该成员变量,需要增加一个公有的静态方法,这就是所谓的定义一个公有的方法提供一个全局访问点
 public static Singleton GetInstance()//GetInstance()方法的访问修饰符为Public,方便外界对象调用来获取实例。
 {
    lock (uniqueInstance)lock //lock(uniqueInstance)实现线程间的互斥访问,第一线程访问,加锁,访问后、解锁,第二个访问
    {
       //getInstance()方法中首先判断uniqueInstance类的实例是否存在,不存在则创建一个,否则返回。先调用getInrance()方法,后实例化uniqueInstance
       if (uniqueInstance == null)
       {
           uniqueInstance = new Singleton();
       }                
       return uniqueInstance;
    }         
 }


总结

单例模式(Singleton Pattern):保证一个类只有一个实例,并且提供一个访问他的全局访问点

优点:每个类只能实例化一个对象,外界可共享该对象,节约系统资源。

缺点:无抽象层,单例模式包含了类的创建和类方法的使用,任务重,违背了单一职责原则。

适用场景:系统只有一个实例对象,外界通过公共访问点访问该实例。

关于单例模式的学习就先介绍到这里,如果本篇博客对初学者的您有一定的帮助,请在博客右方点一个赞,表示对小编的鼓励吧。


猜你喜欢

转载自blog.csdn.net/fjxcsdn/article/details/80377618