当前位置: 首页 > news >正文

设计模式-简单工厂模式(静态工厂模式)java实现

 介绍

简单工厂模式根据所提供的参数数据返回几个可能类中的一个类的实例。通常返回的类都有一个公共的父类和公共的方法。

 

意图

提供一个类,负责根据一定的条件创建某一具体类的实例。同时使用工厂模式也是为了隐藏创建对象的过程

角色及其职责

(1)工厂(Creator)角色:是简单工厂模式的核心,负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。

(2) 抽象(Produet)角色:是简单工厂模式所创建的所有对象的父类,负责描述所有实例所共有的公共接口。

(3) 具体产品(Concrete Product)角色:是简单工厂模式的创建目标,所有创建的对象

都是充当这个角色的某个具体类的实例。一般来讲,它是抽象产品类的子类,实现了抽象产

品类中定义的所有接口方法。

 

 在工厂角色中可以通过参数来判断创建哪种具体的产品子类对象,这个参数可以通过配置文件获取,也可以作为方法参数传入。

例子

下面我来实现一下

一个产品接口,两个产品类Chair,Desk,一个工厂类,通过参数来决定创建哪个具体产品

产品接口

public interface MyProduct {//返回产品的具体名称String getProductName();
}

具体产品

public class Chair implements MyProduct{@Overridepublic String getProductName() {return "椅子";}
}
public class Desk implements MyProduct{@Overridepublic String getProductName() {return "桌子";}
}

工厂类

/*** @Classname MyProductFactory* @author: 我心* @Description: 产品工厂类* @Date 2022/11/26 21:51* @Created by Lenovo*/
public class MyProductFactory {public MyProduct getProduct(String code){MyProduct product=null;//要返回的产品对象//如果参数是c,则创建Chair对象if (code.equals("c")){product=new Chair();}//如果参数是d,则创建Desk对象else if( code.equals("d")){product=new Desk();}return product;}
}

运行代码

public class Main {public static void main(String[] args) {//这时候我们就不需要关注具体创建的是什么对象,只需要知道它是所需的产品即可,隐藏了创建对象的细节MyProductFactory productFactory=new MyProductFactory();//然后我们直接调用产品的公共接口方法使用即可,不管是什么产品,都实现了这一个接口,我们也不需要关注接口的细节MyProduct c = productFactory.getProduct("c");System.out.println(c.getProductName());}
}

运行结果

 

相关文章:

设计模式-简单工厂模式(静态工厂模式)java实现

介绍 简单工厂模式根据所提供的参数数据返回几个可能类中的一个类的实例。通常返回的类都有一个公共的父类和公共的方法。 意图 提供一个类,负责根据一定的条件创建某一具体类的实例。同时使用工厂模式也是为了隐藏创建对象的过程 角色及其职责 (1)工厂(Creator…...

如何共享笔记本电脑网络

为了让手机连接笔记本网络,我们通常通过在笔记本上安装诸如WiFi共享精灵来实现,其实没有那么麻烦: 1、在电脑上打开“设置”—>选择“网络和Internet”—>选择“移动热点”(如果系统是Windows 7或更低版本,则需要…...

Android 高级进阶知识整理

Android Framework 启动流程 init 进程启动过程 Android系统启动流程 Zygote启动流程及源码分析 APP启动流程 init进程是Android用户空间第一个进程,主要做以下3件事情: 创建和挂载启动所需的文件目录。初始化和启动关键服务,守护关键…...

一文详解 DolphinDB SQL 标准化

为了提升用户体验,降低用户学习成本和脚本迁移复杂度,自 1.30.17 / 2.00.5 版本开始,DolphinDB 逐步支持了标准化 SQL 的书写方法;并于 1.30.22 / 2.00.10 版本起,对标准 SQL 的常用语法和关键字实现了兼容。 1. 与标…...

ATF(TF-A)安全通告汇总

目录计划如下,相关内容补充中,待完成后进行超链接,敬请期待,欢迎您的关注 1、Advisory TFV-1 (CVE-2016-10319) 2、Advisory TFV-2 (CVE-2017-7564) 3、Advisory TFV-3 (CVE-2017-7563) 4、Advisory TFV-4 (CVE-2017-9607) 5、Ad…...

vuejs 设计与实现 - 简单diff算法

DOM 复用与key的作用: DOM 复用什么时候可复用? key 属性就像虚拟节点的“身份证”号,只要两个虚拟节点的 type属性值和 key 属性值都相同,那么我们就认为它们是相同的,即可以进行 DOM 的复用。即 我们通过【移动】来…...

【前端|Javascript第3篇】探秘JavaScript的作用域与作用域链:小白也能轻松搞懂!

大家好!欢迎来到本篇博客,今天我们将解开JavaScript编程世界中的一道神秘面纱:作用域与作用域链。很多Javascript开发者并不真正理解它们,但这些概念对掌握Javascript至关重要。如果你对这些概念感到困惑,不要担心&…...

【Spring AOP】结合日志面向切面编程 两种写法

概念 这里需要提前了解什么是Spring的AOP(Aspect Oriented Programming)。是在OOP(面向对象)思想的一种拓展思想。简单来说就是将某个代码块嵌入到其它的代码块中。笔者先前学Spring也有学什么IoC啊AOP啊,但实际上没有…...

C#在自动化领域的应用前景与潜力

人机界面(HMI)开发:使用C#开发人机界面软件,实现与自动化设备的交互和监控。C#的图形界面设计能力和丰富的控件库使得开发人员能够创建直观、易用的界面。 数据采集与处理:C#可以与各种传感器、设备进行数据通信和采集…...

string模拟实现:

string模拟实现: 上一篇博客,我们对String类有了一个基本的认识,本篇博客我们来从0~1去模拟实现一个String类,当然我们实现的都是一些常用的接口。 ❓我们这里定义了一个string类型,然后STL标准库里面也有string&#…...

系统与软件安全研究(八)

FUZZ101入门 Detail gcc,clang,llvm都有啥区别GCC (GNU Compiler Collection), Clang, 和 LLVM 都是用于编译代码的工具链。它们在某些方面有相似之处,但也有一些重要的区别。 GCC (GNU Compiler Collection):GCC 是由 GNU 组织开发的,是一个非常流行的开源编译器集合。它…...

jmeter测试rpc接口-使用dubbo框架调用【杭州多测师_王sir】

1.基于SOAP架构。基于XML规范。基于WebService协议。特点:接口地址?wsdl结尾2.基于RPC架构,基于dubbo协议,thrift协议。SpringCloud微服务。3.基于RestFul架构,基于json规范。基于http协议(我们常用的都是这种,cms平台也是) Rest…...

Java8中forEach()里使用return的效果

先总结:使用forEach()处理集合时不能使用break和continue这两个方法,可以使用无返回值的return跳出此次循环,效果同标准for循环的continue。 首先,forEach()先对入参判空,然后使用增强for循环调用action.accept(t)&am…...

MVC配置原理

如果你想保存springboot的mvc配置并且还想自己添加自己的配置就用这个。 视图解析器原理,它会从IOC容器里获取配置好视图解析器的配置类里的视图解析器集合, 然后遍历集合,生成一个一个的视图对象,放入候选 视图里,…...

rabbitmq安装

安装erlang方案二 vi /etc/yum.repos.d/rabbitmq-erlang.repo 文件内容: In /etc/yum.repos.d/rabbitmq-erlang.repo [rabbitmq-erlang] namerabbitmq-erlang baseurlhttps://dl.bintray.com/rabbitmq-erlang/rpm/erlang/22/el/7 gpgcheck1 gpgkeyhttps://dl.bi…...

轻松抓取网页内容!API助力开发者,快速数据采集

在如今这个信息爆炸的时代,人们需要从各种渠道获取数据来支持自己的业务需求。而对于开发者们来说,如何快速、准确地从互联网上抓取所需的数据也成为了一项重要的技能。而抓取网页内容 API 则是一种能够帮助开发者轻松实现数据抓取的工具。 一、什么是抓…...

CSDN 直播:腾讯云大数据 ES 结合 AI 大模型与向量检索的新一代云端检索分析引擎 8月-8号 19:00-20:30

本次沙龙围绕腾讯云大数据ES产品展开,重点介绍了腾讯云ES自研的存算分离技术,以及能与AI大模型和文本搜索深度结合的高性能向量检索能力。同时,本次沙龙还将为我们全方位介绍腾讯云ES重磅推出的Elasticsearch Serverless服务,期待…...

区块链智能合约代码示例

以下是一个简单的区块链智能合约代码示例: pragma solidity ^0.4.17;contract SimpleContract {uint public myData;function setMyData(uint newData) public {myData newData;} }该合约具有以下功能: 定义了一个名为 SimpleContract 的合约。定义了一…...

Spring Boot介绍--快速入门--约定优于配置

文章目录 SpringBoot 基本介绍官方文档Spring Boot 是什么?SpringBoot 快速入门需求/图解说明完成步骤快速入门小结 Spring SpringMVC SpringBoot 的关系总结梳理关系如何理解-约定优于配置 SpringBoot 基本介绍 官方文档 官网: https://spring.io/projects/spring-boot 学习…...

Scons编译lib库

实例目录结构: include文件夹:test.hsrc文件夹:test.cSConscriptSConstruct 如下图所示: SConstruct: #执行当前目录下的SConscript SConscript(SConscript);SConscript: import os from SCons.Script…...

OpenClaw配置可视化:Phi-3-mini-128k-instruct模型参数调优

OpenClaw配置可视化:Phi-3-mini-128k-instruct模型参数调优 1. 为什么需要参数调优? 上周我在用OpenClaw自动生成技术文档时遇到了一个典型问题:同样的提示词,有时候输出简洁专业,有时候却变得啰嗦跑题。这种不稳定性…...

从宿主机(Windows)通过 NAT 模式连接虚拟机(Ubuntu)中的 MySQL

宿主机(NAT 模式)连接虚拟机 MySQL 完整记录环境:Windows 宿主机 VMware Workstation(Ubuntu 虚拟机,NAT 网络) 目标:从宿主机通过本地网络连接虚拟机内的 MySQL,并允许 Java 等程序…...

Activiti7实战指南:从流程实例到任务分配的全流程解析

1. Activiti7流程引擎核心概念解析 Activiti7作为当前最流行的开源工作流引擎之一,在企业级业务流程管理中扮演着重要角色。我第一次接触Activiti是在2014年参与某金融项目的审批系统开发时,当时就被它优雅的设计理念所吸引。经过多年实战,我…...

SAP Smartform 自定义页格式实战:SPAD配置全流程解析

1. 为什么需要自定义页格式? 在SAP系统中处理打印需求时,经常会遇到标准页格式无法满足实际业务需求的情况。比如打印特殊尺寸的票据、多语言表单或者带有公司专属页眉页脚的文件时,标准的A4、A5等纸张格式就显得力不从心了。这时候就需要通过…...

滨会生物冲刺港股:年亏1.2亿 乐普生物与扬子江药业是股东

雷递网 雷建平 4月5日武汉滨会生物科技股份有限公司(简称:“滨会生物”)日前更新招股书,准备在港交所上市。滨会生物总计募资超10亿元,其中,2021年2月完成募资6亿元,2022年7月完成募资2.4亿元&a…...

OpenClaw+千问3.5-9B自动化写作:技术博客大纲与初稿生成

OpenClaw千问3.5-9B自动化写作:技术博客大纲与初稿生成 1. 为什么需要自动化写作助手 作为一个技术博主,我经常面临这样的困境:明明对某个技术点有深刻理解,却卡在如何组织文章结构上。有时候花在列大纲上的时间比实际写作还长&…...

Python数据处理实战:列表推导式+time库+DataFrame+groupby详细代码注释

🚢 船长Talk | 每天一篇数据分析干货 关注公众号「船长Talk」,获取更多 Python / 数据分析 / SQL 实战技巧,附完整注释代码。 每篇文章都有详细代码注释,学了就能用。Python 数据处理实战:列表推导式 time库 DataFra…...

西交提出 OdysseyArena:让智能体真正“学会探索”的长程归纳推理基准

📌 一句话总结: 本工作提出 OdysseyArena,一个面向长时程(long-horizon)、主动探索(active)、归纳学习(inductive)三大核心能力的交互式评测平台,系统性检验…...

OpenClaw多模型对比:Qwen3.5-9B与Llama3本地接口性能实测

OpenClaw多模型对比:Qwen3.5-9B与Llama3本地接口性能实测 1. 测试背景与实验设计 去年在搭建个人自动化工作流时,我尝试用OpenClaw对接了多个开源大模型。当需要处理不同复杂度任务时,发现模型选择会显著影响最终效果。这次我决定用相同硬件…...

RTOS学习指南:从理论到实践的完整路径

1. RTOS入门路径解析:从理论到实践的完整指南作为一名嵌入式开发者,我经历过从裸机开发到RTOS应用的完整转型过程。记得第一次接触RTOS时,面对任务调度、信号量等新概念确实一头雾水。但通过系统学习和项目实践,我发现掌握RTOS并没…...