标签:style blog class code c java
在开发程序时,往往需要在整个工程中只需要一个类的实例。而这个实例一旦被创建就不能被其他的实例再创建了,通常我们称这个实现过程为单例模式。
既然要保证类只有一个实例,那么就需要其他的类不能使用实例化该类。因此,需要将其构造方法设为私有的,即使用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 }
要想实现单例模式,首先,需要将类的构造方法定义为类的私有成员方法。当然,如果不是实现单例模式,这样做是不对的,因为在类外是无法创建该类的实例的。既然无法创建类的实例,那么单例模式又是如何创建这个类的实例的呢?方法很简单,在类中定义一个公有的静态成员方法,在这个静态成员方法中创建类的实例就可以了。
当我们在解决问题时,这个问题的解决方案有很多种,处理起来非常不方便。例如,在使用图像处理软件处理图片后,需要选择一种格式保存。然而各种格式在底层实现的算法并不相同,这刚好适合策略模式。
对于策略模式,需要定一个抽象类来标识各种策略的抽象。这样就可以使用多态来让虚拟机选择不同的实现类。然后让每一个中具体的策略来实现这个抽象,并为其中定义的方法提供具体的实现。由于在选择适当的策略上有些不方便,需要不断地判断需要的类型,因此用简单工厂方法类实现判断过程。
下面通过代码来看一下策略模式的应用,代码如下:
VC++编程之道读书笔记(2),布布扣,bubuko.com
标签:style blog class code c java
原文地址:http://www.cnblogs.com/lit10050528/p/3724695.html