简单工厂模式
1.1 模式动机
考虑一个实际例子,一个包子店铺可以提供多个不同馅料的包子(韭菜鸡蛋包子,猪肉白菜包子,冬瓜肉包子等)。这些包子都属于“包子”这一个大类(基类),它们有共同的制作基础(和面、擀面、包馅料),只是每个包子的馅料制作有所不同。
对于顾客点单的时候,他们并不需要知道制作工序有什么不一样的,只需要知道我就要韭菜鸡蛋包子,并付钱就可以了。我们通过后厨的加工,将对应的包子给到顾客,这样的逻辑就可以理解为简单工厂模式。
1.2 模式定义
简单工厂模式
(Simple Factory Pattern):又称为静态工厂方法
(Static Factory Method)模式,它属于类创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。
1.3 模式结构
简单工厂模式包含如下角色:
Factory
:工厂角色
工厂角色负责实现创建所有实例的内部逻辑Product
:抽象产品角色
抽象产品角色是所创建的所有对象的父类,负责描述所有实例所共有的公共接口ConcreteProduct
:具体产品角色
具体产品角色是创建目标,所有创建的对象都充当这个角色的某个具体类的实例。
1.4 模式分析
- 将对象的创建和对象本身业务处理分离可以降低系统的耦合度,使得两者修改起来都相对容易。
- 在调用工厂类的工厂方法时,由于工厂方法是静态方法,使用起来很方便,可通过类名直接调用,而且只需要传入一个简单的参数即可,在实际开发中,还可以在调用时将所传入的参数保存在XML等格式的配置文件中,修改参数时无须修改任何源代码。
- 简单工厂模式最大的问题在于工厂类的职责相对过重,增加新的产品需要修改工厂类的判断逻辑,这一点与开闭原则是相违背的。
- 简单工厂模式的要点在于:当你需要什么,只需要传入一个正确的参数,就可以获取你所需要的对象,而无须知道其创建细节。