深度学习设计模式之简单工厂模式

文章目录


前言

本文主要学习简单工厂设计模式,这个设计模式主要是将创建复杂对象的操作单独放到一个类中,这个类就是工厂类,创建对象的时候由工厂类决定创建那个对象。

通俗理解工厂设计模式:工厂就是用来造东西的。


一、简单工厂设计模式的作用?

简单工厂模式又称"静态工厂方法"可以根据参数的不同返回不同类的实例,专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

二、详细分析

1.核心组成

  • Factory:工厂类,简单工厂模式的核心类。他提供决定实例化对象的统一方法。
  • IProduct:产品抽象类,简单工厂创建的所有对象的共同父类。
  • Product:具体产品类,简单工厂模式创建的目标对象。

其中ICar是产品抽象类,BMWCarToyotaCarSylphyCar都是具体的产品类;CarFactory是工厂类;FactoryTest则为测试类;

2.实现步骤

  • 创建抽象产品类,里面有产品的抽象方法,由具体的产品类去实现。
  • 创建具体产品类,继承了他们的父类,并实现具体方法。
  • 创建工厂类,提供了一个静态方法createXXX用来生产品,只需要传入你想实例化的产品名称,即可实例化对应产品;

3.示例代码

抽象产品类

复制代码
/**
 * 抽象产品类
 */
public interface ICar {

    /**
     * 购买汽车
     */
    void buyCar();

}

具体产品类:

复制代码
/**
 * 具体的产品类
 */
public class BMWCar implements ICar{
    @Override
    public void buyCar() {
        System.out.println("购买宝马汽车");
    }
}

/**
 * 具体的产品
 */
public class ToyotaCar implements ICar{
    @Override
    public void buyCar() {
        System.out.println("购买丰田汽车");
    }
}

/**
 * 具体产品类
 */
public class SylphyCar implements ICar{
    @Override
    public void buyCar() {
        System.out.println("购买轩逸汽车");
    }
}

工厂类

复制代码
/**
 * 工厂类
 */
public class CarFactory {

    /**
     * 工厂方法
     * @param type
     * @return
     */
    public ICar createBuyCar(String type){
        if(type.equals("BMW")){
            return new BMWCar();
        }else if(type.equals("Toyota")){
            return new ToyotaCar();
        }else if(type.equals("Sylphy")){
            return new SylphyCar();
        }
        return null;
    }

}

测试类

复制代码
    public static void main(String[] args) {
        CarFactory factory = new CarFactory();
        ICar car = factory.createBuyCar("BMW");
        car.buyCar();
    }

结果

4.优缺点

优点

  • 将创建对象和使用对象进行分离,使用者不关心对象的创建逻辑,实现了解耦。
  • 每个产品创建都是单独的类进行维护,这样后续的扩展或修改更简单。

缺点

  • 工厂类集成了所有产品的创建,一旦工厂类出现问题,则会影响所有的产品创建。
  • 一旦新增产品,就得对工厂类进行修改,违背了 "开闭原则"

5.使用场景

  • 职责分离:当客户只关注于类的使用,而不关心类的创建的时候。
  • 如果对象创建复杂且多处需用到的时候使用,这样就可以复用代码,同时当业务逻辑发生修改的时候,只需要修改一处即可。

总结

本文主要介绍了简单工厂设计模式提供了简单的代码示例。切记使用的过程中不要为了设计模式而设计模式,因场景而定,对于比较简单的场景,不使用设计模式将会更简单实现。过于依赖使用工厂设计模式将会创建更多的类,不利于代码结构的维护。

相关推荐
ss27321 小时前
手写MyBatis第32弹-设计模式实战:Builder模式在MyBatis框架中的精妙应用
设计模式·mybatis·建造者模式
汤姆大聪明21 小时前
【软件设计模式】策略模式
设计模式·策略模式
pengzhuofan1 天前
Java设计模式-模板方法模式
java·设计模式·模板方法模式
使二颗心免于哀伤1 天前
《设计模式之禅》笔记摘录 - 17.模板方法模式
笔记·设计模式·模板方法模式
AlenLi2 天前
JavaScript - 观察者模式的实现与应用场景
前端·设计模式
pengzhuofan2 天前
Java设计模式-享元模式
java·设计模式·享元模式
希望_睿智2 天前
实战设计模式之解释器模式
c++·设计模式·架构
楚禾Noah2 天前
【设计模式实战】原型模式 + 工厂模式:AI Agent 配置中心
人工智能·设计模式·原型模式
钢铁男儿2 天前
C# 简单工厂模式(简单工厂模式如何工作)
前端·c#·简单工厂模式
Pure_Eyes2 天前
设计模式详解
设计模式