一种创建型模式, 对各子类的实例化通过工厂类进行封装.
说明
- 简单工厂模式, 又叫做静态工厂模式(static Factory Method)
- 属于创建型模式. 其不属于23种GOF设计模式
- 对外可见的类:
- 工厂类
- 抽象父类
- 实质: 由一个工厂类根据传入的参数来动态的决定该创建的实例类型. 在使用时通过父类指针来调用虚函数. 从而实现多态.
优缺点
优点
- 对外隐藏了对象的创建过程. 外界只负责消费对象.
缺点
- 因为创建对象集中在了工厂类中, 违背了高内聚责任分配原则.
使用场景
- 一般在简单的场景下使用.
- 工厂类负责创建的对象类型较少时.
示例
//父类
class Language{
public:
virtual void whatIsIt(void)=0;
};
//子类1
class Chinese : public Language {
public:
void whatIsIt(void) { cout << "is Chinese" << endl; }
};
//子类2
class English: public Language {
public:
void whatIsIt(void) { cout << "is English" << endl; }
};
//子类3
class Japanese: public Language {
public:
void whatIsIt(void) { cout << "is Japanese" << endl; }
};
//工厂类
class Factory {
public:
//根据传入参数, 创建不同类型的子类实例, 并以父类指针类型传出
static Language * makeLanguage(const string &language) {
if (language == "Chinese") {
return new Chinese();
} else if (language == "English") {
return new English();
} else if (language == "Japanese") {
return new Japanese();
}
}
};
{ //使用 (需对外暴露 父类 及 工厂类 )
Language *p = Factory::makeLanguage("Chinese");
p->whatIsIt(); //结果为: "is Chinese"
Language *q = Factory::makeLanguage("English");
q->whatIsIt(); //结果为: "is English"
}