写点什么

1. 简单工厂模式

作者:下雨了
  • 2022 年 4 月 03 日
  • 本文字数:1096 字

    阅读完需:约 4 分钟

概念及定义

需要明确的是简单工厂模式并不属于 23 种设计模式。但是作为工厂模式的一种实现,经常会被拿来与工厂方法模式/抽象工厂模式做异同比较。


简单工厂模式的主要思想

工厂类的生产接口以枚举类为参数,在内部根据枚举类生产出对应的产品并返回给调用者。


简单工厂模式中角色以及职责

  1. Factory(工厂角色)

对外提供生产方法,利用参数控制具体返回的产品类型。


  1. AbstractProduct(抽象产品角色)

定义产品的公共方法。


  1. Product(产品实现角色)

对公共方法重写,实现产品的独有特性。


简单工厂模式的优缺点

优点:

  1. 单一职责,工厂类负责产品对象的创建。

  2. 调用者只需要关心对应的枚举类型,即可以创建出对应的具体产品,而不需要了解具体的产品类。

缺点:

  1. 对于普通产品创建的代码量,简单工厂模式需要多维护一个工厂类,增加了代码的复杂度。

  2. 如果需要增加具体的产品类别,则需要修改对应的枚举类与工厂类,代码耦合性比较高。


实现步骤:

  1. 定义枚举类:该枚举类作为工厂类的生产接口的参数,可以让工厂类的生产方法生产对应的产品并返回给调用者。

public enum CarType {    Volkswagen,Tesla}
复制代码

2.定义抽象产品接口:

public interface ICar {    void drive();}
复制代码

3.定义汽车工厂类:produceCar 方法接收枚举类参数,返回与枚举类对应的产品。

public class CarFactory {    public static ICar produceCar(CarType type){        switch (type){            case Tesla: return new TeslaCar();            case Volkswagen: return new VolkswagenCar();            default: return null;        }    }}
复制代码

4.定义具体产品:特斯拉汽车与大众汽车。

public class TeslaCar implements ICar{    @Override    public void drive() {        System.out.println("Tesla 滴滴滴");    }}
复制代码


public class VolkswagenCar implements ICar{    @Override    public void drive() {        System.out.println("Volkswagen 滴滴滴");    }}
复制代码

5.测试结果:

public class SimpleFactoryPattern {    public static void main(String[] args) {        //生产方法接收枚举类中的Volkswagen        ICar volkswagen = CarFactory.produceCar(CarType.Volkswagen);        volkswagen.drive(); //输出结果:Volkswagen 滴滴滴        //生产方法接收枚举类中的Tesla        ICar tesla = CarFactory.produceCar(CarType.Tesla);        tesla.drive(); //Tesla 滴滴滴    }}
复制代码

总结:

由测试结果可见:

  1. 虽然 produceCar 方法返回类型为 ICar,但是在执行 drive 方法时,由子类具体现实 drive 方法。

  2. 简单工厂模式即实现:通过更改调用工厂的生产接口的参数,达到生产不同产品的目的。

发布于: 刚刚阅读数: 6
用户头像

下雨了

关注

还未添加个人签名 2021.05.11 加入

还未添加个人简介

评论

发布
暂无评论
1.简单工厂模式_设计模式_下雨了_InfoQ写作平台