首页 > 代码库 > VC++编程之道读书笔记(2)

VC++编程之道读书笔记(2)

第三篇 技术细节

第七章:细说开发人员必知必会的39个开发细节

细节36:单例模式的应用

在开发程序时,往往需要在整个工程中只需要一个类的实例。而这个实例一旦被创建就不能被其他的实例再创建了,通常我们称这个实现过程为单例模式。

既然要保证类只有一个实例,那么就需要其他的类不能使用实例化该类。因此,需要将其构造方法设为私有的,即使用private关键字修饰。同时,类中提供一个静态方法,该方法的返回值是该类的一个实例。这样就只能使用该静态方法来获取类的实例了,从而保证了唯一性。

下面通过具体代码来实现一个单例模式的应用,代码如下:

 1 #include <iostream>
 2 using namespace std;
 3 
 4 class Emperor
 5 {
 6 private:
 7     static Emperor *pEmperor; // declear a reference
 8     static int count; // contructor times
 9     Emperor() // contructor
10     {
11         count++;
12     }
13 public:
14     static Emperor getInstance()
15     {
16         if(NULL == pEmperor)
17         {
18             pEmperor = new Emperor();
19         }
20         
21         return *pEmperor;
22     }
23     void getName()
24     {
25         cout << "I am the " << count << "contructor" << endl; 
26     }
27 }
28 int main(void)
29 {
30     cout << "The first time contructor" << endl;
31     Emperor emperor1 = Emperor::getInstance();
32     emperor1.getName();
33     
34     cout << "The second time contructor" << endl;
35     Emperor emperor2 = Emperor::getInstance();
36     emperor2.getName();
37     
38     cout << "The third time contructor" << endl;
39     Emperor emperor3 = Emperor::getInstance();
40     emperor3.getName();
41     
42     return 0;
43 }

要想实现单例模式,首先,需要将类的构造方法定义为类的私有成员方法。当然,如果不是实现单例模式,这样做是不对的,因为在类外是无法创建该类的实例的。既然无法创建类的实例,那么单例模式又是如何创建这个类的实例的呢?方法很简单,在类中定义一个公有的静态成员方法,在这个静态成员方法中创建类的实例就可以了。

细节37:策略模式的简单应用

当我们在解决问题时,这个问题的解决方案有很多种,处理起来非常不方便。例如,在使用图像处理软件处理图片后,需要选择一种格式保存。然而各种格式在底层实现的算法并不相同,这刚好适合策略模式。

对于策略模式,需要定一个抽象类来标识各种策略的抽象。这样就可以使用多态来让虚拟机选择不同的实现类。然后让每一个中具体的策略来实现这个抽象,并为其中定义的方法提供具体的实现。由于在选择适当的策略上有些不方便,需要不断地判断需要的类型,因此用简单工厂方法类实现判断过程。

下面通过代码来看一下策略模式的应用,代码如下: