原来来自www.toutiao.com/i6760107693…
一、简单工厂模式的定义
简单工厂模式是由有一个工厂类去创建同一类型的实例,不同的实例通过类型去控制。
怎么理解了,这就好比一家代工电视机的工厂,这个工厂只能代工小米电视,这个工厂可以生产40寸、55寸、60寸、80寸的电视,假如小米需要60寸的电视,这个工厂的流水线就把60寸的电视生产出来,只需要一个类型指令就可以了。这样说只是一个简化,实际生产过程中相当的复杂,设计供应链、订单、交付等各个环节,只是打个比方。
简单工厂模式也称之为静态工厂模式,一个工厂类提供一个静态方法,生成同一系列的产品。简单工厂之所以称之为简单,是由于写法上简单,工厂生产的类型单一。
二、简单工厂模式解决的问题
1. 遵循单一职能设计原则, 创建与使用分离,使用者无需关注创建的细节,只需要遵循公共的定义即可。
2. 是工厂方法与抽象工厂模式的简单实现,对业务场景变化很少的场景很适用。
三、简单工厂模式存在的问题
1. 违背开闭原则,新增业务场景,需要修改工厂类
2. 由于是静态方法,没有办法继承扩展
四、简单工厂的实例
1. 创建流程
①定义创建实例的抽象类或接口
②实现抽象类或接口
③实现工厂类创建实例对象
简单工厂创建流程
2. 简单工厂示例,一个简单的例子说明简单工厂的用法
①.定义抽象类
public abstract class Employee {
private int id;
private String name;
//抽象行为,所有示例的公有行为
public abstract void action();
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
② 实现抽象类
A. 程序员实现类
public class Programmer extends Employee {
@Override
public void action() {
System.out.println(getName() + "苦逼的程序员正在写bug~");
}
}
B. 销售的实现类
C. public class Saler extends Employee {
@Override
public void action() {
System.out.println(getName() + "我正在与客户沟通~~");
}
}
③实现简单工厂
public class SimpleFactory {
/**
* 通过参数,控制创建的具体的实例对象,返回的是抽象的类
* @param type
* @return
*/
public static Employee createEmployee(String type){
if(type.equals("programmer")){
return new Programmer();
}
else if(type.equals("saler")){
return new Saler();
}
return null;
}
}
这样我们的简单工厂就实现完成了, 当然写法上根据自身的实际情况而定,但是主要的思想是不变的。