面试中如何巧妙提问Singleton模式的设计考量?
- 内容介绍
- 文章标签
- 相关推荐
本文共计5989个文字,预计阅读时间需要24分钟。
“引子+请写一个Singleton。面试官微笑着和我说话。+这可真简单。我心想,并在白板上写下了下面的Singleton实现:+1 class Singleton+2 {+3 public :+4 static Singleton Instance()++5 {+6 static Singleton Si+
引子
“请写一个Singleton。”面试官微笑着和我说。
“这可真简单。”我心里想着,并在白板上写下了下面的Singleton实现:
1 class Singleton 2 { 3 public: 4 static Singleton& Instance() 5 { 6 static Singleton singleton; 7 return singleton; 8 } 9 10 private: 11 Singleton() { }; 12 };
“那请你讲解一下该实现的各组成。”面试官的脸上仍然带着微笑。
“首先要说的就是Singleton的构造函数。由于Singleton限制其类型实例有且只能有一个,因此我们应通过将构造函数设置为非公有来保证其不会被用户代码随意创建。而在类型实例访问函数中,我们通过局部静态变量达到实例仅有一个的要求。另外,通过该静态变量,我们可以将该实例的创建延迟到实例访问函数被调用时才执行,以提高程序的启动速度。”
保护
“说得不错,而且更可贵的是你能注意到对构造函数进行保护。毕竟中间件代码需要非常严谨才能防止用户代码的误用。
本文共计5989个文字,预计阅读时间需要24分钟。
“引子+请写一个Singleton。面试官微笑着和我说话。+这可真简单。我心想,并在白板上写下了下面的Singleton实现:+1 class Singleton+2 {+3 public :+4 static Singleton Instance()++5 {+6 static Singleton Si+
引子
“请写一个Singleton。”面试官微笑着和我说。
“这可真简单。”我心里想着,并在白板上写下了下面的Singleton实现:
1 class Singleton 2 { 3 public: 4 static Singleton& Instance() 5 { 6 static Singleton singleton; 7 return singleton; 8 } 9 10 private: 11 Singleton() { }; 12 };
“那请你讲解一下该实现的各组成。”面试官的脸上仍然带着微笑。
“首先要说的就是Singleton的构造函数。由于Singleton限制其类型实例有且只能有一个,因此我们应通过将构造函数设置为非公有来保证其不会被用户代码随意创建。而在类型实例访问函数中,我们通过局部静态变量达到实例仅有一个的要求。另外,通过该静态变量,我们可以将该实例的创建延迟到实例访问函数被调用时才执行,以提高程序的启动速度。”
保护
“说得不错,而且更可贵的是你能注意到对构造函数进行保护。毕竟中间件代码需要非常严谨才能防止用户代码的误用。

