工厂类含有必要的判断逻辑,可以决定在什么时候使用哪种产品类的实例。
抽象产品类是所创建的所有对象的父类。
具体产品类是创建目标,继承自抽象产品类。
http://design-patterns.readthedocs.org/zh_CN/latest/creational_patterns/simple_factory.html
#include "Factory.h"
#include "ConcreteProductA"
#include "ConcreteProductB"
Product* Factory::createProduct(string proname) {
if ('A' == proname) {
return new ConcreteProductA();
}
else if('B' == proname) {
return new ConcreteProductB();
}
}
createProduct()
工厂类的工厂方法往往是静态方法,可以通过类名直接调用。使用起来很方便。
简单工厂模式将对象的创建和对象本身的业务处理分离,降低了系统和耦合度,使两者修改起来都相对容易。
问题在于,工厂类职责过重,增加新的产品就需要修改相关逻辑,不符合软件开发的开闭原则(对扩展开放,对修改封闭)。且工厂类一旦不能工作,对整个系统都有影响。
简单工厂模式使用了静态工厂方法,造成工厂角色无法形成基于继承的等级结构。
静态方法是该类的行为,与该类的对象无关