简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。
简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。
简单工厂的职责划分:客户(创建者)、产品,两类角色。
用一句话来描述该模式解决的问题:{客户} 根据需要 {创建} {产品}
,我把重要的部分用{}
括了出来。
简单工厂模式
有一个跟简单工厂十分相似的模式是策略模式。策略模式用一句话来描述就是:{客户} 根据需求 {选择} {实现}
。
模式 | 描述 |
---|---|
简单工厂 | {客户} 根据需要 {创建} {产品} |
策略模式 | {客户} 根据需求 {选择} {实现} |
我把它俩列成表格,这样方便作对比。简单工厂与策略模式的{客户}
区别不大。简单工厂趋向于创建产品
,而策略模式趋向于选择实现(已有产品、或逻辑分支)
。也正是因为两者的行为不同,他们也分别被归类为创建型(简单工厂)
与行为型(策略模式)
。
太多的理论不如一行代码,下面举出一个例子来给出解决方案。
Samu
是一款可以自己不断学习的机器人,在Alice
体会到了Samu
的强大功能的同时,也同时无限烦恼Samu
的操控命令太多,无法一一记住。Alice
不经好奇,Samu
又是如何记得这么多命令的呢?
所以我们需要抽象出一个 命令工厂 去创建 客户需要的命令。
public class Factory{
public Product create(String requirement){
switch(requirement){
case "":
return new OpenDoorProduct();
default
return new DefaultProduct();
}
}
}
public class Customer{
void main(String[] args){
Factory factory = new Factory();
Product procuct = factory.create("开门");
}
}
工厂模式将对象的创建和对象本身业务处理分离可以降低系统的耦合度,使得两者修改起来都相对容易。
简单工厂模式
1、需要创建的产品对象比较少,并且改动的场景不会频繁。 2、客户端需要知道简单工厂类所需要的参数,这意味着通常在系统内部之间使用简单工厂更合适。 3、创建的产品之间没有关联关系,彼此是独立且处于同一个层级的。比如芒果、香蕉、苹果这样的产品是适合简单工厂模式的。而喜糖、喜糖盒子、礼袋、烟,可能用简单工厂模式不是一个好主意,因为他们都可以被抽象为结婚用品。
因为简单工厂类的职责比较重,所以增加新的产品需要修改工厂类的判断逻辑,这一点与开闭原则是相违背的。
代码片段
makeNewWindow