开头
今天我们学习单例模式,所谓的单例模式就是一个类只能实例化一次,也就是说只能创建一次对象,我们拿我们的电脑为例,当我们调用个性化窗口的时候,无论通过什么方式调用出来,只出现一个个性化的窗口,这样的窗口就具有唯一性,如果每调用一次就出现一个这样的窗口,系统就会不停的为该进程分配内存,导致系统内存资源得到极大的浪费,而且多个窗口都是一致的,对我们毫无意义。
内容
单例模式具有唯一性,为确保其唯一性我们需要注意以下两点:
(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):保证一个类只有一个实例,并且提供一个访问他的全局访问点 |
优点:每个类只能实例化一个对象,外界可共享该对象,节约系统资源。
缺点:无抽象层,单例模式包含了类的创建和类方法的使用,任务重,违背了单一职责原则。
适用场景:系统只有一个实例对象,外界通过公共访问点访问该实例。
关于单例模式的学习就先介绍到这里,如果本篇博客对初学者的您有一定的帮助,请在博客右方点一个赞,表示对小编的鼓励吧。