简单工厂模式

工厂模式分为 简单工厂模式(Simple Factory Pattern)、工厂方法模式(Factory Method)、抽象工厂模式(Abstract Factory Pattern)。有的说简单工厂模式是工厂方法模式的一种特例。

工厂模式属于类创建型模式,同属于创建型模式的还有单例模式,建造者模式。

简单工厂模式

简单工厂模式(Simple Factory Pattern)因为内部使用静态方法根据不同参数构造不同产品对象实例,也称静态工厂方法模式。
在简单工厂模式中,可以根据参数的不同返回不同实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

简单工厂模式有三部分组成:工厂类,抽象产品,具体产品

  • 工厂类:是此模式的核心类,内部提供静态工厂方法,用于创建所需产品对象,可被外界直接调用。
  • 抽象产品:是工厂类创建的所有对象的父类或共有的接口,封装各种产品对象的公有方法。
  • 具体产品:是此模式的创建目标,每个具体产品都继承了抽象产品角色,实现抽象产品角色中的抽象方法。

简单工厂模式案例解析

案例情景:做饭,分为早饭,午饭。

/**
 * 工厂类
 *
 * @author jinzifu
 * @create 2018/2/23 14:41
 */
public class FoodFactory {

    /**
     * 工厂类静态方法
     * @param type  产品类型参数
     * @return
     */
    public static IMakeFood getInstance(String type) {
        IMakeFood iMakeFood = null;
        if (type.equalsIgnoreCase("Breakfest")) {
            iMakeFood = new Breakfest();
        } else if (type.equalsIgnoreCase("Lunch")) {
            iMakeFood = new Lunch();
        }
        return iMakeFood;
    }
}

工厂类根据传入的参数实例化所需产品对象,并返回抽象产品的接口类型或抽象类型的实例,还可以负责产品对象的初始化工作以及一些资源和环境配置工作,例如连接数据库、创建文件等。

/**
 * 抽象产品-做饭
 *
 * @author jinzifu
 * @create 2018/2/22 17:54
 */
public interface IMakeFood {
    /**
     * 做饭
     */
    void makeFood();
}
/**
 * 具体产品类-做午饭
 *
 * @author jinzifu
 * @create 2018/2/22 17:54
 */
public class Lunch implements IMakeFood {
    @Override
    public void makeFood() {
        System.out.println("午饭");
    }
}

具体产品类实现抽象产品接口或继承抽象产品类。
如果具体产品的创建需要复杂的配置和初始化,可继承抽象产品类并在父类共有方法中统一初始化。

外部测试及打印:

 FoodFactory.getInstance("Lunch").makeFood();
 
 午饭

简单工厂模式总结

  • 简单工厂模式实现了对象的“创建”和“使用”的分离,遵循了“单一职责原则”,但增加新的产品对象时须修改工厂类静态方法,违背了“开闭原则”。
  • 工厂类集中了所有产品创建逻辑(几乎是全能的),一旦不能工作,整个系统影响很大。
  • 工厂类中使用了静态工厂方法,造成该类方法无法形成基于继承的等级结构。

针对简单工厂模式中出现的问题,我们做了一下优化,即工厂方法模式的引入。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容