工厂模式-简单工厂模式

226 阅读2分钟

原来来自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;
    }
}

这样我们的简单工厂就实现完成了, 当然写法上根据自身的实际情况而定,但是主要的思想是不变的。