【个人纪录】C++面试总结之三(设计模式)

【个人纪录】C++面试总结之三(设计模式)

由于本人是菜鸟级别,不严谨之处较多,欢迎大佬指正,在学习的路上不断狂奔

比如面试官问了一个设计模式问题,然后就可以针对设计模式这个问题适当展开,不至于问你一个就回答这一个问题,无法完全展示自己技能,适当的展开可以为面试加分哟

开始:

C++中常用的设计模式有:单例模式、工厂模式、策略模式、适配器模式、原型模式、模板模式、建造者模式、外观模式、组合模式、代理模式、享元模式、桥接模式、装饰模式、备忘录模式、中介者模式、职责链模式、观察者模式等。

简单描述一下工厂模式

工厂模式分为:简单工厂模式、工厂方法模式、抽象工厂模式。组要解决接口选择的问题。
(1)、简单工厂模式:主要特点是需要在工厂类中做判断,从而创造相应的产品,当新增新产品时,需要修改工厂类。
(2)、工厂方法模式:是指定义一个创建对象的接口,让子类决定实例化哪一个类,使一个类的实例化延迟到子类。每增加一种产品,就需要增加一个对象工厂,相比于简单工厂模式,工厂方法模式需要定义更多的类。
(3)、抽象工厂模式:提供一个创建一系列相关或相互依赖的对象接口,而无需指定他们的具体类。该方法扩展非常困难,要增加一个系列的某一产品,需要从上往下都要加代码。

简单描述一下单例模式

单例模式一句话的来讲就是,这个类只存在一个实例化对象。
之前总结的单例模式内含有代码片段:https://blog.csdn.net/hwx802746/article/details/104976730

如何实现实例化?

既然只能有一个实例化对象,那么就要防止被多次实例化,如何防止?就要把构造函数私有化或者受保护,这样构造函数就无法被外部调用,只能被类内部的成员函数调用,所以我们需要定义一个公有函数来供外部使用,这个公有函数返回一个对象,为了保证多次调用这个公有函数都会返同一个对象,就需要将这个给对象设置为静态的。
简单总结一下需要注意三点:
一、构造函数需要私有或者受保护;
二、定义静态对象;
三、定义静态公有函数

单例模式分为懒汉模式和饿汉模式。
懒汉模式,一开始不实例化,等到调用的时候才进行实例化,顾名思义,比较懒,用时间换空间。
饿汉模式,一开始就进行了实例化,顾名思义,比较饿,用空间换时间。

饿汉模式为什么比懒汉模式使用起来更安全?

饿汉比懒汉更安全主要体现在线程安全上面,原因如下:
假如是懒汉模式,线程一在调用公有函数时,判断p是空,进行初始化,线程二也在调用该公有函数,也在判断p是空,也给他初始化。两个线程同时再给他初始化岂不是乱套!但是如果是饿汉模式,由于一开始就已经给p初始化了,多个线程在调用公有函数时,直接拿即可,不存在任何问题,也就避免了懒汉的那种尴尬情况。

虽然说在懒汉的公有函数里给判断前后加个锁可以有效解决这个问题,但是即使这样,和饿汉比起来会很繁琐,故孰优孰劣,大家懂的。

©️2020 CSDN 皮肤主题: 我行我“速” 设计师:Amelia_0503 返回首页