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

news2024/11/16 3:50:04

文章目录

  • 前言
  • 一、简单工厂设计模式的作用?
  • 二、详细分析
    • 1.核心组成
    • 2.实现步骤
    • 3.示例代码
    • 4.优缺点
      • 优点
      • 缺点
    • 5.使用场景
  • 总结


前言

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


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

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

二、详细分析

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

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

总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1676774.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

20【Aseprite 作图】画岩石

1 画一个岩石的框架,不是一个正规的圆,可以把最高点不放在中心,会显得自然 2 用油漆桶填满框架 3 要改变岩石的颜色,可以调整HSV里面的S,降低饱和度 4 描边,和地面连接处可以不描边 5 颜色调得更浅一点,(通过HSV里面的S可以做到),作为亮处的轮廓; 通过把透明度调…

【LAMMPS学习】八、基础知识(6.6)在 Windows 10 上使用 LAMMPS 和 WSL

8. 基础知识 此部分描述了如何使用 LAMMPS 为用户和开发人员执行各种任务。术语表页面还列出了 MD 术语,以及相应 LAMMPS 手册页的链接。 LAMMPS 源代码分发的 examples 目录中包含的示例输入脚本以及示例脚本页面上突出显示的示例输入脚本还展示了如何设置和运行各…

uniapp 微信小程序使用ec-canvas图表

微信小程序中使用到了ec-canvas图表&#xff0c;从DCloud插件市场中下载echarts-for-wx&#xff1b; 在uniapp项目中找到js-sdk文件夹&#xff0c;把其中的uni-ec-canvas放到要用的包的components中。 在文件中导入&#xff1a; 饼图&#xff1a; <template><view…

嵌入式学习——Shell(流指针、文件读写函数)——day20

1. 标准IO和文件IO的区别 1. 标准IO是一种有缓存的IO形式&#xff08;接收了一部分内容后给到linux内核中&#xff09; 2. 文件IO是一种没有缓存的IO形式&#xff08;即刻交给linux内核&#xff0c;及时性&#xff09; 3. 标准IO是库函数,库函数可以在Windows和Linux系统中都能…

使用docker创建hadoop集群:Couldn‘t upload the file

运行的环境; Windows10 Docker Desktopdocker-hadoop 出现的问题如下: 解决方法 https://github.com/big-data-europe/docker-hadoop/issues/98

喜大普奔!VMware Workstation Pro 17.5 官宣免费!

Broadcom 已经正式收购 VMware&#xff0c;【VMware中国】官方公众号已于3月11日更名为【VMware by Broadcom中国】。 13日傍晚&#xff0c;该公众号发表推文 V风拂面&#xff0c;好久不见 - 来自VMware 中国的问候 &#xff0c;意味着 VMware 带着惊喜和美好的愿景再次归来。 …

JavaScript进阶——05-迭代器和生成器【万字长文,感谢支持】

迭代器 概念 迭代器&#xff08;Iterator&#xff09;是 JavaScript 中一种特殊的对象&#xff0c;它提供了一种统一的、通用的方式遍历个各种不同类型的数据结构。可以遍历的数据结构包括&#xff1a;数组、字符串、Set、Map 等可迭代对象。我们也可以自定义实现迭代器&…

Git 基础使用(2) 分支管理

文章目录 分支概念分支使用查看分支分支创建分支切换分支合并合并冲突分支删除 分支管理快进模式分支策略内容保存错误处理 分支概念 &#xff08;1&#xff09;分支概念 Git分支是指在版本控制系统Git中&#xff0c;用来表示项目的不同工作流程或开发路径的一个重要概念。通过…

学习Nginx(一):基础

介绍 Nginx是一个高性能的HTTP和反向代理的web服务器&#xff0c;它的设计重点是高并发、高性能和低内存消耗。它常被用于提供静态内容、负载均衡和作为Web服务器。 Nginx具有以下功能和特点&#xff1a; 静态文件服务&#xff1a;作为一个Web服务器&#xff0c;Nginx可以处…

SpringBoot解决CORS跨域——@CrossOrigin

前端请求后端报错了。 状态码&#xff1a;403 返回错误&#xff1a;Invalid coRs request 一个注解就搞定了。 在类上加 CrossOrigin

队列的讲解

队列的概念 队列:只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表&#xff0c;队列具有先进先出FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾 出队列:进行删除操作的一端称为队头 一端进另一端出 也就是可以做到&#xff0c;先…

数据结构与算法-排序算法3-插入排序

目录 1.插入排序&#xff1a; 1.介绍&#xff1a; 2.动态图解 3.举例 4.小结插入排序规则 5.插入排序代码 6.运行时间 代码&#xff1a; 运行结果&#xff1a; 1.插入排序&#xff1a; 1.介绍&#xff1a; 数组中n个元素&#xff0c;把这n个待排序元素看成一个有序序…

01 Triton backend

1 整体架构 三部分组成&#xff1a; Triton backend tensorRT_backend、onnx_backend、tfs_backend、torch_backend **Triton model ** 不同的模型 **Triton model instance ** 模型实例 ![P2}5X%2ULV(2OAC$_OKOP.png 2 设计思路 需要实现七个接口&#xff1a; TRITON…

Elasticsearch - HTTP

文章目录 安装基本语法索引创建索引查看索引删除索引 文档创建文档更新文档匹配查询多条件查询聚合查询映射 安装 https://www.elastic.co/downloads/past-releases/elasticsearch-7-17-0 下载完成启动bin/elasticsearch服务&#xff0c;可以在Postman调试各种请求。 基本语法…

风电功率预测 | 基于遗传算法优化BP神经网络实现风电功率预测(附matlab完整源码)

风电功率预测 风电功率预测 | 基于遗传算法优化BP神经网络实现风电功率预测(附matlab完整源码)完整代码风电功率预测 | 基于遗传算法优化BP神经网络实现风电功率预测(附matlab完整源码) 基于遗传算法优化BP神经网络是一种常见的方法,用于改进BP神经网络在风电功率预测中的性…

IBM Granite模型开源:推动软件开发领域的革新浪潮

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

基于MSWA相继加权平均的交通流量分配算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于MSWA相继加权平均的交通流量分配算法matlab仿真.如图所示交通网络中&#xff0c;包含6个节点、11各路段、9个OD对。经枚举可得每个OD对间存在3条无折返有效路…

RS编码和卷积码总结

RS编码 简要介绍RS编码及其原理 1. RS编码简介 Reed-Solomon编码&#xff08;RS编码&#xff09;是一种强大的纠错码&#xff0c;广泛应用于数据存储和传输中。RS编码由Irving S. Reed和Gustave Solomon于1960年提出&#xff0c;属于BCH码的一种&#xff0c;是基于有限域&am…

免费思维13招之十二:耗材型思维

免费思维13招之十二:耗材型思维 今天给你分享免费思维的两个子思维——相关性耗材思维和非相关性耗材思维。 相关性耗材思维,是指有一些产品的使用,需要大量的相关耗材,从而对该产品进行免费,而耗材进行资费。 举例:全世界最大的一家直销公司叫安利,它的明星产品是净水…

【Python探索之旅】列表

目录 特点 入门 访问元素 新增元素 修改元素 插入元素 删除元素 完结撒花 前言 在Python中&#xff0c;列表(List)是最常用的数据结构之一&#xff0c;类似于其他语言&#xff0c;如Java&#xff0c;与其不同啊Python中不需要声明数据类型。它提供了一种灵活且高效的方式…