首页 > 其他分享 >设计模式 - 简单工厂模式(Simple Factory Pattern)

设计模式 - 简单工厂模式(Simple Factory Pattern)

时间:2024-07-31 17:17:31浏览次数:15  
标签:Simple Pattern 创建对象 模式 工厂 简单 设计模式 ###

设计模式 - 简单工厂模式(Simple Factory Pattern)

   概要

   记忆关键字:工厂类创建对象

   定义:通过工厂类创建对象,并且根据传入参数决定具体子类对象的做法,就是简单工厂模式

   分析:如果一个类的实例需要在许多地方被创建和初始化,而初始化的代码也比较复杂。此时可以考虑使用简单工厂模式

   简单工厂模式不是一个正式的设计模式,但它是工厂模式的基础。它使用一个单独的工厂类来创建不同的对象,根据传入的参数决定创建哪种类型的对象。

 

 

 

   一、能解决什么问题?

   二、涉及的角色

### 1.1 IProduct: 抽象产品角色

所有产品实例的接口,负责描述所有产品实例的行为
### 1.2 Product(A B ..): 具象产品角色
所有产品的实例,实现了抽象产品定义的代码
### 1.3 工厂角色:Factory
负责根据不同的参数创建不同的实例
### 1.4 Client
传入类型的名称,通过工厂类创建对象

## 2.优缺点分析

### 2.1 优点
- 工厂类中包含了必要的逻辑判断,根据客户端选择的条件动态实例化相关的类,对于客户端,去除了与具体产品的依赖

### 2.2 缺点
- 违背了开放-关闭原则:在增加新的子类的时候,工厂类的方法中就要增加新的条件分支判断,这就等于不但对扩展开放了,对修改也开放了。

## 3.分析
所有在用简单工厂的地方,都可以考虑使用发射技术来去除switch或if,解除分支判断带来的耦合

## 4. 项目中的使用
Spring Boot 框架本身并没有直接使用简单工厂模式,因为框架本身更倾向于使用依赖注入和控制反转等设计模式。但是,在实际的Spring Boot项目中,业务代码中经常能用到,
在某些场景下,还可以与策略模式模式结合起来使用。

## 5. 使用场景
大多数情况下,直接使用new关键字来创建对象是没有问题的。而如果创建对象需要一系列复杂的初始化操作,比如关联其他成员对象,查配置文件,查数据表等,
若将这些初始化逻辑写在构造函数里,会降低程序的可读性,此时可以考虑是用简单工厂模式。

在以下情况下可以使用简单工厂模式:

- 工厂类负责创建的对象比较少:由于创建的对象较少,不会造成工厂方法中的业务逻辑太过复杂。
- 客户端只知道传入工厂类的参数,对于如何创建对象不关心:客户端既不需要关心创建细节,甚至连类名都不需要记住,只需要知道类型所对应的参数。

标签:Simple,Pattern,创建对象,模式,工厂,简单,设计模式,###
From: https://www.cnblogs.com/hld123/p/18335056

相关文章

  • Bugku:Simple_SSTI_2
    目录1.进入网站查看题目2.开始尝试3.判断引擎模板类型4.构造语句,开始注入5.得到flag1.进入网站查看题目再查看源代码,发现没有什么有用的。根据题目提示SSTI,搜索一下SSTI,了解一下。  SSTI(服务器端模板注入)也是格式化字符串的一个非常好的例子,如今的开发已经形成......
  • Pattern的使用与Matcher正则表达式的使用。
    Pattern的使用在Java中,java.util.regex.Pattern类用于表示正则表达式的编译表示。正则表达式是一种强大的模式匹配工具,它可以用于搜索、替换和解析字符串。以下是一些常见的正则表达式匹配规则:普通字符:大多数字符都是普通字符,它们匹配自身。例如,正则表达式abc将匹配字符串......
  • 06_Calendar类_SimpleDateFormat类_System类
    一、Calendar类Calendar的构造方法是protectedCalendar(),由于修饰符是protected,所以无法直接创建该对象,需要使用Calendar.getInstance();创建。其他方法:代码示例:importjava.util.Calendar;publicclassdemo01{publicstaticvoidmain(String[]args){......
  • vue-simple-uploader 支持分片上传,多文件上传,断点续传等多种功能的文件上传组件
    vue-simple-uploader特性:1、支持文件、多文件、文件夹上传2、支持拖拽文件、文件夹上传3、统一对待文件和文件夹,方便操作管理4、可暂停、继续上传5、错误处理6、支持“快传”,通过文件判断服务端是否已存在从而实现“快传”7、上传队列管理,支持最大并发上传8、分块上传9、......
  • 【设计模式】代理模式详解
    1.简介代理模式是常用的Java设计模式,该模式的特点是代理类与委托类共享相同的接口。代理类主要负责预处理消息、过滤消息、将消息转发给委托类,并在事后处理消息等。代理类与委托类之间通常存在关联关系,一个代理类对象与一个委托类对象关联。代理类对象本身不真正实现服务,而......
  • HV000030: No validator could be found for constraint ‘javax.validation.constrai
    原文链接:https://blog.csdn.net/miachen520/article/details/119817478错误原因:数字类型不能使用javax.validation.constraints.Pattern注解解决办法方法一:.将字段类型设置为String类型;方法二:使用其他验证注解验证,数字的有@Size,@Min,@Max,@Range现将@Valid常用注解介绍如下:Be......
  • 设计模式实战:日志系统的设计与实现
    问题描述设计一个日志系统,支持在应用程序中记录日志信息。系统需要确保日志记录器是唯一的实例,支持不同的日志记录方法(如文件、数据库),并且能够适配不同的日志格式(如JSON、XML)。设计分析单例模式单例模式确保一个类只有一个实例,并提供一个全局访问点。日志系统中的日志记......
  • 设计模式:代理、装饰和适配器模式的区别
    结构对比讲实话,博主当初学习完整设计模式时,这三种设计模式单独摘哪一种都是十分清晰和明确的,但是随着模式种类的增加,在实际使用的时候竟然会出现恍惚,例如读开源代码时,遇到不以模式命名规范的代码时,一时难以说清具体是使用的这三种里的哪一种。之所以会出现混淆的原因是,三种模式......
  • 自制基于simplefoc大功率驱动板想法的由来,同时欢迎有相同兴趣的F友一起来玩。。。
      前一阵子,偶然在B站上看了一个simplefoc的介绍视频,代码简洁、算法精妙让人佩服,更让人佩服的是:开源!遂!搜索之!不搜不知道一搜吓一跳,发现太OUT了,原来玩这个算法的人这么多,让我这个整天沉浸在帕克、反帕克、Ualpha、Ubeta...的开发攻城狮汗颜。  出于好奇和对知识的无限渴求(冒......
  • 我无法使用 PySimpleGUI 打开第三个窗口
    我无法创建第三个窗口。代码工作没有错误,但它不显示代码结束的窗口当前我正在尝试使其显示一个复选框表,供人们选择座位。我测试过它是否根本没有运行。把print放在它后面,它就会打印出来。我也尝试让它显示简单的文本,但这也不起作用。下面是代码:layout3=[[sg.Text('Tes......