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

文章目录


前言

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

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


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

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

二、详细分析

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.使用场景

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

总结

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

相关推荐
马剑威(威哥爱编程)22 分钟前
读写锁分离设计模式详解
java·设计模式·java-ee
修道-032324 分钟前
【JAVA】二、设计模式之策略模式
java·设计模式·策略模式
G皮T4 小时前
【设计模式】结构型模式(四):组合模式、享元模式
java·设计模式·组合模式·享元模式·composite·flyweight
W_Meng_H4 小时前
设计模式-组合模式
设计模式·组合模式
吾与谁归in14 小时前
【C#设计模式(8)——过滤器模式(Adapter Pattern)】
设计模式·c#·过滤器模式
G皮T15 小时前
【设计模式】行为型模式(一):模板方法模式、观察者模式
java·观察者模式·设计模式·模板方法模式·template method·行为型模式·observer
iFlyCai17 小时前
23种设计模式的Flutter实现第一篇创建型模式(一)
flutter·设计模式·dart
zhouzhihao_0717 小时前
程序代码设计模式之模板方法模式(1)
java·设计模式·模板方法模式
xianwu54317 小时前
【设计模式】工厂模式
开发语言·c++·设计模式·简单工厂模式·抽象工厂模式
树懒_Zz21 小时前
设计模式-状态模式(State)
设计模式·状态模式