C++笔记问题整理(二)-------设计模式

总结一下遇到的问题,和可能遇到的面试题目。
1.什么是设计模式

2.什么是单例模式

3.在单例模式中,什么是懒汉模式,什么是饿汉模式,二者有什么区别?

4.在单例模式中,不考虑多线程的情况下,如何保证一个类只创建一个实例,除了这一种,还有哪种方法能禁止类生成对象

5.用C++举一个单例模式的例子?


参考答案

1.什么是设计模式
设计模式是一种经验的传承,是被前人发现,经过总结形成的一套某一类问题一般性解决方案,而不是被设计出来的定性规则,它不像算法那样可以照搬照用。
经典设计模式一共23种,由于水平有限下面只介绍其中几种。

2.什么是单例模式?
单例模式,顾名思义,只有一个例子,是一种常用的软件设计模式。其核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例。即一个类只有一个对象实例
单例模式的特点:
1.只有一个例子。
2.提供了一个对象的全局访问指针(放在public里面),这个指针被所有模块共享。
3.单例模式允许将来有更多的实例(可扩充性)。

3.在单例模式中,什么是懒汉模式,什么是饿汉模式,二者有什么区别?
懒汉模式这个名字还挺有趣的,顾名思义懒汉,就是指等用到这个例子的时候才会实例化对象,
饿汉模式正好相反,因为饥饿,当单例类定义的时候就实例化好了。
从以上的定义可以看出,懒汉模式消耗的时间更多,而饿汉模式消耗的空间更多。
所以:
访问量比较大,或线程比较多的时候,运行时间较长,适合用饿汉模式,
访问量较小时,运行时间短的时候,可以用懒汉模式。

4.在单例模式中,不考虑多线程的情况下,如何保证一个类只创建一个实例,除了这一种,还有哪种方法能禁止类生成对象?

单例模式通过将构造函数设置为类的私有成员((或保护成员)的方式来禁止通过类通过一般的构造函数生成新对象。

扫描二维码关注公众号,回复: 6498393 查看本文章

除此之外,抽象类也能禁止类实例化。
即在类中加入纯虚函数,就是在函数前面加个virtual,后面不定义函数,加个=0,写法如下:

class Example
  {
       virtual int function1(int a)=0;
       …
  };

5.用C++代码分别写出懒汉模式、饿汉模式和加锁后的单例模式代码?
单例模式除了构造函数私有化外,还要保证能有一个可以全局调用的接口。
懒汉模式如下:

class Singleton1
{
private:
     Singleton1(){}
     static Singleton1 *psig;
public:
     static Singleton1* GetInstance()
     {
          if(psig==nullptr)
          {
            psig=new Singleton1();
          }
               return psig;
      }
};

猜你喜欢

转载自blog.csdn.net/alexhu2010q/article/details/81876312