简单工厂模式又叫做静态工厂方法模式。它的核心思想就是用一个工厂,根据输入的条件不同,从而产生不同的类,然后根据不同类的virtual函数得到不同的结果,这就理所当然的要求被创建的实例要具有共同的父类。
优点:工厂类是整个模式的关键所在。它包含必要的判断逻辑,能够根据外界给定的信息,决定究竟应该创建哪个具体类的对象。用户在使用时可以直接根据工厂类去创建所需的实例,而无需了解这些对象是如何创建以及如何组织的。有利于整个软件体系结构的优化。
缺点:简单工厂模式违背了“开放封闭原则”,即违背了“系统对扩展开放,对修改关闭”的原则,因为当我新增加一个产品的时候必须修改工厂类。另外它也违背了违背了单一职责原则。
类图如下:
代码如下:
#include<iostream> using namespace std; /* 抽象产品类 */ class Fruit{ public: virtual void getName() = 0; }; /* 具体产品类 */ class Banana :public Fruit { public: virtual void getName() { cout << "我是香蕉..." << endl; } }; /* 具体产品类 */ class Apple :public Fruit { public: virtual void getName() { cout << "我是苹果..." << endl; } }; /* 具体工厂类 */ class Factory{ public: /* 根据输入不同,产生不同的具体产品类 */ Fruit* creatFruit(const char* p ) { if (0 == strcmp(p, "banana")) { return new Banana; } else if (0 == strcmp(p, "apple")) { return new Apple; } else { cout << "没有这种水果:" << p << endl; return NULL; } } }; int main() { Factory* f = new Factory; Fruit* fruit = f->creatFruit("apple"); if (fruit) { fruit->getName(); delete fruit; } fruit = f->creatFruit("banana"); if (fruit) { fruit->getName(); delete fruit; } fruit = f->creatFruit("人参果"); if (fruit) { fruit->getName(); delete fruit; } delete f; system("pause"); return 0; }
运行结果如下: