学习C++已经很长时间了,但是学过之后就没有在复习过,在近期的面试过程中总是因为一些基础知识掌握不牢固导致面试过不了,于是我又重新复习了一下基础知识,整理一下知识点。
今天主要总结的知识点是关于C++中常用的设计模式中的三种,分别是单例模式、工厂模式和观察者模式。
1、单例模式
其作用是保证一个类只有一个实例,并且提供一个访问它的全局访问点,使得系统中只有唯一的一个对象实例。
其实现有两个步骤:(1)将该类的构造函数方法定义成私有方法,这样其他部分的代码就无法通过调用该类的构造函数来实例化该类的对象,只能通过该类提供的静态方法来获得该类的唯一实例;(2)在该类内提供一个静态方法,当我们调用这个方法时,如果类所拥有的引用不为空则返回这个引用,如果类所持有的引用为空则创建该类的实例,并将实例的引用赋予该类所保持的引用。
其使用场景是资源管理,如线程池、日志等
在多线程条件下实现单例模式如果不采取任何措施,那么该实现是不安全的,可能会创建多个单例。所以一般情况,其实现通常有两种方式:懒汉式与饿汉式。
2、工厂模式
主要解决的是接口选择的问题。该模式下定义一个创建对象的接口,随后让子类自己选择要实例化的工厂类,然后将实例化的过程移动到子类中进行。
其分为三种,分别是简单工厂模式、工厂方法模式、抽象工程模式。
(1)简单工厂模式:这个是工厂模式中最简单的一种实现,对于不同的产品创建定义一个工厂类,然后将产品的类型作为参数传递到工厂的创建函数中,随后根据类型的不同选择不同的产品创建函数,进行产品的创建。
(2)工厂方法模式:这个是真正的工厂模式,是对简单工厂模式的一次升级。工厂方法模式是在简单工厂模式基础上增加对工厂中基类的抽象,不同的产品创建用不同的工厂。A产品的创建使用A类工厂,B产品的创建使用B类的工厂。其优势在于后期的过程中可以增加产品的种类,但是结构比较单一。
(3)抽象工厂模式:抽象工厂模式是对工厂方法模式进行了更一般化的描述。工厂方法模式适用于结构比较单一的场所中,为同一类的产品提供创建的接口,而抽象工厂模式则适用于产品种类比较多的场所,当有多个抽象类的产品类型时,抽象工厂就派上了用场。
3、观察者模式:定义对象间的一种一对多的依赖关系。将对象分为观察者与被观察者,当被观察者的状态发生改变时,观察者会及时的收到通知并且及时的进行数据更新。当被观察者发生改变时,所有关注它的观察者都会得到通知。其原理就像是观察者在被观察者那里注册了一个回调函数。