简单工厂模式-Simple Factory Pattern

原文地址:https://jaune162.blog/design-pattern/simple-factory-pattern/

简介

简单工厂模式是一种非常常用的设计模式,但是并不属于GoF中的23种设计模式。简单设计模式有很多种实现方式。

本文我们就来讨论简单工厂模式的实现方式,以及如何借助Spring实现一个扩展性很好的简单工厂模式。

定义及实现

定义

  • creates objects without exposing the instantiation logic to the client.
  • refers to the newly created object through a common interface
  • 创建对象但是不想客户端暴露对象实例化的逻辑
  • 通过通用接口引用新创建的对象

结构

  • Product:商品接口。
  • ConcreteProductA和ConcreteProductB:分别为商品的两个实现。
  • Factory:工厂,创建商品实例,并将商品实例返回给客户端供客户端调用。
  • Client:客户端,商品的使用者。

实现

public interface Product {void doSomething();
}public class ConcreteProductA implements Product {@Overridepublic void doSomething() {System.out.println("This is product A");}
}public class ConcreteProductB implements Product {@Overridepublic void doSomething() {System.out.println("This is product B");}
}public class Factory {public Product createProduct(String type) {if (type.equalsIgnoreCase("A")) {return new ConcreteProductA();} else if (type.equalsIgnoreCase("B")) {return new ConcreteProductB();}throw new RuntimeException("不支持的类型");}
}public class Client {public static void main(String[] args) {Factory factory = new Factory();Product product = factory.createProduct("A");product.doSomething();}
}

其实简单工厂模式的核心就是下面的代码

if (type.equalsIgnoreCase("A")) {return new ConcreteProductA();
} else if (type.equalsIgnoreCase("A")) {return new ConcreteProductB();
}

通过判断传入的参数,然后根据参数创建不同的对象。

这种方式的弊端就是我们没增加一种Product的实现,都需要修改工厂类。下面我们将一种不用修改工厂类的方法。

将产品注册到工厂

ProductConcreteProductAConcreteProductB不变。

public class Factory {public Map<String, Class<? extends 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

钓鱼邮件的发送工具GUI

一.简介 本程序利用Python语言编写&#xff0c;使用Tkinter实现图形化界面&#xff0c;可使用Pyinstaller进行exe打包&#xff0c;程序主界面截图如下&#xff1a; 二.功能 1.支持腾讯企业邮、网易企业邮、阿里企业邮、自建邮服SMTP授权账号&#xff08;其他邮服&#xff0c…

C++ //练习 6.10 编写一个函数,使用指针形参交换两个整数的值。在代码中调用该函数并输出交换后的结果,以此验证函数的正确性。

C Primer&#xff08;第5版&#xff09; 练习 6.10 练习 6.10 编写一个函数&#xff0c;使用指针形参交换两个整数的值。在代码中调用该函数并输出交换后的结果&#xff0c;以此验证函数的正确性。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&…

【教程】C++语言基础学习笔记(七)——Array数组

写在前面&#xff1a; 如果文章对你有帮助&#xff0c;记得点赞关注加收藏一波&#xff0c;利于以后需要的时候复习&#xff0c;多谢支持&#xff01; 【C语言基础学习】系列文章 第一章 《项目与程序结构》 第二章 《数据类型》 第三章 《运算符》 第四章 《流程控制》 第五章…

Protégé pizza 03 Install Protege - 本体编辑器 Ontology Editor

Protege是一款非常方便使用的开源的本体&#xff08;ontology&#xff09;编辑器&#xff0c;可以用来建立知识图谱。 这个视频介绍了Protege工具的安装&#xff0c;是学习pizza.owl系列知识的前提。 https://v.youku.com/v_show/id_XNjE1NDc0NTU3Mg.html

调用讯飞火星AI大模型WebAPI

调用讯飞火星AI大模型 记录一次调用讯飞AI大模型的过程 官方文档 首先&#xff0c;去官网申请资格&#xff0c;获得必要秘钥等 再编写url&#xff0c;该url存在编码要求&#xff0c;具体看官网url编写 具体代码如下&#xff1a; getWebsocketUrl() {return new Promise((resol…

掘根宝典之C++深复制与浅复制(复制构造函数,默认复制构造函数)

到目前为止我们已经学了构造函数&#xff0c;默认构造函数&#xff0c;析构函数&#xff1a;http://t.csdnimg.cn/EOQxx 转换函数&#xff0c;转换构造函数&#xff1a;http://t.csdnimg.cn/kiHo6 友元函数&#xff1a;http://t.csdnimg.cn/To8Tj 接下来我们来学习一个新函数…

部署JForum2过程。

居然用了两天时间&#xff0c;才把JForum2部署成功。走了一些弯路&#xff0c;主要原因是想当然&#xff0c;以为jdk和tomcat&#xff0c;应该向下兼容&#xff0c;所以就随便选的版本。 一、jdk-17、apache-tomcat-10.1.18-windows-x64&#xff0c;部署完jforum-2.8.2.war,改…

PWR电源控制

PWR电源 PWR简介 PWR&#xff08;Power Control&#xff09;电源控制 PWR负责管理STM32内部的电源供电部分&#xff0c;可以实现可编程电压监测器和低功耗模式的功能 可编程电压监测器&#xff08;PVD&#xff09;可以监控VDD电源电压&#xff0c;当VDD下降到PVD阀值以下或上…

MATLAB|【免费】高比例可再生能源电力系统的调峰成本量化与分摊模型

目录 主要内容 部分代码 结果一览 下载链接 主要内容 程序复现文献《高比例可再生能源电力系统的调峰成本量化与分摊模型》&#xff0c;从净负荷波动的角度出发&#xff0c;建立了调峰成本的量化与分摊模型&#xff0c;构造了无调峰需求的替代场景&#xff0c;将…

山东:优化提升恶劣天气高影响路段保障工作

2023年9月1日&#xff0c;山东省气象局联合省公安厅、省交通运输厅联合印发《2023年山东省恶劣天气高影响路段优化提升气象保障工作方案》&#xff08;以下简称《方案》&#xff09;&#xff0c;扎实推进恶劣天气高影响路段优化提升气象保障工作&#xff0c;为公路网安全畅通提…

scIMC:scRNA-seq插补方法基准

在scRNA-seq中一个主要的挑战即为“dropout”事件&#xff0c;它扭曲了基因表达&#xff0c;显著影响了单细胞转录组的下游分析。为了解决这个问题&#xff0c;已经做了很多努力&#xff0c;并开发了几种基于模型和基于深度学习的scRNA-seq插补方法。但是&#xff0c;目前还缺乏…

C++ //练习 6.11 编写并验证你自己的reset函数,使其作用于引用类型的参数。

C Primer&#xff08;第5版&#xff09; 练习 6.11 练习 6.11 编写并验证你自己的reset函数&#xff0c;使其作用于引用类型的参数。 #环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 代码块 /**************************************…