一,工厂模式
原理:
提供了一种创建相关对象的接口,而无需指定他们的类型。
应用实例:
系统提供了标准的UIButton类,但是系统提供的标准类没办法满足我们的需求。此时我们会在UIButton的基础上创建一些自定义的类,例如UIAButton,UIBButton,UICButton。我们可以在需要使用这些自定义的类时,直接使用这些实现类创建对象,采用硬编码的方式与其他的代码耦合在一起。但是如果有一天我们发现UIAButton已经不满足我们的要求,我们要用UIDButton来替换UIAButton,就要在我们的代码里找到每一处使用UIAButton的位置,然后使用UIDButton进行替换,如果发现程序里有100多个地方使用到UIAButton,直接爆炸。我们也可以采用另外一种方法,即创建一个Factory类,在这个类里针对上面的每一个实现类,定义一个对应实现类对象的方法,每个方法返回一个UIButton指针。这样做实现类没有与代码硬编码在一起,如果要用BIDbutton来替换UIAButton,只需要在修改相关的工厂方法即可非常方便。下面是我们的代码实现:
#include <iostream>
using namespace std;
class UIButton{
public:
virtual void display(){}
};
class RedButton : public UIButton{
public:
void display(){
cout<<"RedButton"<<endl;
}
};
class GreenButton : public UIButton{
public:
void display(){
cout<<"GreenButton"<<endl;
}
};
class Factory{
public:
static UIButton *createRedButton(){
return new RedButton;
}
static UIButton *createGreenButton(){
return new GreenButton;
}
};
int main() {
UIButton *redButton = Factory::createRedButton();
redButton->display();
UIButton *greenButton = Factory::createGreenButton();
greenButton->display();
return 0;
}
输出结果:
RedButton
GreenButton
Process returned 0 (0x0) execution time : 0.012 s
Press any key to continue.
程序分析:
所有的按键对象都是使用Factory类中的方法进行创建的,如果以后我们对RedButton不满意,要对它进行修改,只需要修改Factory类中的相关代码,使用起来比较的方便,程序具有很强的扩展性。