工厂模式之简单工厂模式

文章目录

  • 工厂模式
    • 工厂模式分为
    • 工厂模式的角色
    • 简单工厂模式
    • 案例
    • 代码
      • 定义一个父类,三个子类
      • 定义简单工厂
      • 客户端使用
      • 输出结果

工厂模式

工厂模式属于创造型的模式,用于创建对象。

工厂模式分为

  • 简单工厂模式:定义一个简单工厂类,根据传递的参数来返回不同的对象

  • 工厂方法模式:定义一个创建对象的接口,将实例化的过程由子类来决定,适合单个产品的创建。

  • 抽象工厂模式:定义创建对象的接口,子类来创建一系列相关的产品,或者是依赖族,可以说是简单工厂与工厂方法的结合。

工厂模式的角色

  • 抽象产品:定义一个产品的接口或者是抽象方法。
  • 具体产品:实现抽象产品的实际对象。
  • 抽象工厂:定义一个创建对象的接口或抽象方法。
  • 具体工厂:实现与抽象工厂的具体方法。

简单工厂模式

定义一个简单工厂类,根据传递的参数来返回不同的对象。这样我们在需要添加对象的时候只需要添加代码就可以了,不需要对原来代码进行修改。简单工厂模式也可以叫做静态工厂模式,可以把返回对象的方法定义中静态方法,这样就更加的方便了。

简单来说:根据参数通过一个工厂类来返回相应的对象。符合开放扩展,修改关闭原则。

案例

image-20240701105546875

代码

定义一个父类,三个子类


public class Person {public void action(){System.out.println("Person , 我是一个人");}
}public class Student extends Person{@Overridepublic void action(){System.out.println("Student, 我是一名学生");}
}public class Man extends Person{@Overridepublic void action(){System.out.println("Man, 我是一名男人");}
}public class Lady extends Person{@Overridepublic void action(){System.out.println("Lady,我是一名女生");}
}

定义简单工厂

public class SimpleFactory {public Person getPerson(String type){if (type == null){return null;}if("man".equals(type)){return new Man();}else if("student".equals(type)){return new Student();}else if("lady".equals(type)){return new Lady();}else{return null;}}}

客户端使用

public class Client {public static void main(String[] args) {SimpleFactory simpleFactory = new SimpleFactory();Person person = simpleFactory.getPerson("man");person.action();person = simpleFactory.getPerson("lady");person.action();person = simpleFactory.getPerson("student");person.action();person = simpleFactory.getPerson("teacher");if (person == null){System.out.println("没有这个类型");}}
}

输出结果

image-20240701105811436

我是小辉,24 届毕业生。当下是找工作ing,欢迎关注,持续分享。

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

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

相关文章

VuePress 的更多配置

现在,读者应该对 VuePress、主题和插件等有了基本的认识,除了插件,VuePress 自身也有很多有用的配置,这里简单说明下。 ‍ ‍ VuePress 的介绍 在介绍了 VuePress 的基本使用、主题和插件的概念之后,我们再来看看官…

【MySQL】1.初识MySQL

初识MySQL 一.MySQL 安装1.卸载已有的 MySQL2.获取官方 yum 源3.安装 MySQL4.登录 MySQL5.配置 my.cnf 二.MySQL 数据库基础1.MySQL 是什么?2.服务器,数据库和表3.mysqld 的层状结构4.SQL 语句分类 一.MySQL 安装 1.卸载已有的 MySQL //查询是否有相关…

vue事件参数

事件参数 事件参数可以获取event对象和通过事件传递数据 获取event对象 <template> <buttonclick"addCount">点击</button><p>count is: {{ count }}</p><p>{{ coutent_e }}</p> </template> <script>expor…

昇腾910B部署Qwen2-7B-Instruct进行流式输出【pytorch框架】NPU推理

目录 前情提要torch_npu框架mindsport框架mindnlp框架 下载模型国外国内 环境设置代码适配&#xff08;非流式&#xff09;MainBranch结果展示 代码适配&#xff08;流式&#xff09; 前情提要 torch_npu框架 官方未适配 mindsport框架 官方未适配 mindnlp框架 官方适配…

25.【C语言】循环结构之for 上

1.基本使用 类比while 在while循环中&#xff0c;有三个不可或缺的部分&#xff1a;初始化&#xff0c;判断部分&#xff0c;调整部分 int i 0;//初始化 while (i < 10)//判断部分 {……i;//调整部分 }三个部分太分散&#xff0c;用for循环可集为一体&#xff0c;简洁 …

如何使用uer做多分类任务

如何使用uer做多分类任务 语料集下载 找到这里点击即可 里面是这有json文件的 因此我们对此要做一些处理&#xff0c;将其转为tsv格式 # -*- coding: utf-8 -*- import json import csv import chardet# 检测文件编码 def detect_encoding(file_path):with open(file_path,…

使用flask的web网页部署介绍

使用flask的web网页部署介绍 文章目录 前言一、网页介绍二、数据库设计介绍总结 前言 flaskbootstrapjquerymysql搭建三叶青在线识别网站&#xff0c;使用nginxgunicorn将网站部署在腾讯云上&#xff0c;配置SSL证书。网站地址&#xff1a;https://www.whtuu.cn 三叶青图像识…

Android增量更新----java版

一、背景 开发过程中&#xff0c;随着apk包越来越大&#xff0c;全量更新会使得耗时&#xff0c;同时浪费流量&#xff0c;为了节省时间&#xff0c;使用增量更新解决。网上很多文章都不是很清楚&#xff0c;没有手把手教学&#xff0c;使得很多初学者&#xff0c;摸不着头脑&a…

爬虫笔记20——票星球抢票脚本的实现

以下内容仅供交流学习使用&#xff01;&#xff01;&#xff01; 思路分析 前面的爬虫笔记一步一步走过来我们的技术水平也有了较大的提升了&#xff0c;现在我们来进行一下票星球抢票实战项目&#xff0c;实现票星球的自动抢票。 我们打开票星球的移动端页面&#xff0c;分…

KDTree 简单原理与实现

介绍 K-D树是一种二叉树的数据结构&#xff0c;其中每个节点代表一个k维点&#xff0c;可用于组织K维空间中的点&#xff0c;其中K通常是一个非常大的数字。二叉树结构允许对多维空间中的点进行非常有效的搜索&#xff0c;包括最近邻搜索和范围搜索&#xff0c;树中的每个非叶…

Newport太阳光模拟器MSOL-UV-X使用说明手侧

Newport太阳光模拟器MSOL-UV-X使用说明手侧

死锁-活锁与活锁的预防、死锁与死锁的预防和检测(处理死锁的方式:事务等待图)

一、引言 1、死锁是因采用封锁技术实现并发控制而产生的一种运行事务被阻塞或等待的现象 2、如果利用严格两阶段封锁协议来解决我们前面提到的“更新丢失”这种数据不一致问题&#xff0c;非串行调度中的事务T1首先获得数据对象X上的读锁并开始执行&#xff0c;随后事务T2也获…

算法库应用--Brute - Force算法串匹配(顺序串)

学习贺利坚老师关于B-F算法的算法库 数据结构例程——串的模式匹配&#xff08;Brute-Force算法&#xff09;_sqstring s, t; strassign(s,"ababcabcacbabcaccab");-CSDN博客 本人规则解析博客 串的匹配 (Brute - Force 算法)_brute force算法-CSDN博客\ 版本更新日志…

在5G/6G应用中实现高性能放大器的建模挑战

来源&#xff1a;Modelling Challenges for Enabling High Performance Amplifiers in 5G/6G Applications {第28届“集成电路和系统的混合设计”(Mixed Design of Integrated Circuits and Systems)国际会议论文集&#xff0c;2021年6月24日至26日&#xff0c;波兰洛迪} 本文讨…

跟着峰哥学java 第四天 商品分类 前后端显示

1.后端 1.1mybatis-plus分页查询配置 在商品热卖数据中&#xff0c;只让其显示八条数据 将要使用分页 也就是service.page方法 此时需要配置 mp拦截器 Configuration public class MybatisPlusConfig {Beanpublic PaginationInterceptor paginationInterceptor() {return …

宝可梦 第一到第五时代 神兽 幻兽 准神宝可梦盘点

小时候特别喜欢看宝可梦 也玩过一些宝可梦类游戏 而宝可梦中 大家最喜欢的莫过于神兽 今天 我们来盘点一下 宝可梦各世代的神兽 以及准神宝可梦 第一世代 一级神 超梦 属性: 超能力 是火箭队根据梦幻基因制造的一只人造传说宝可梦。 一直是一只热度非常高的宝可梦&#xf…

图书管理系统 全栈项目分享

文章目录 项目简要说明项目开源地址b站视频演示技术栈部分效果展示 项目简要说明 本项目是我的数据库课设&#xff0c;个人感觉做得还行&#xff0c;目前项目开源&#xff0c;README文档里有项目的介绍和使用说明&#xff0c;这里就不一一赘述了 项目开源地址 github - libr…

MobaXterm不显示隐藏文件

MobaXterm在左边显示隐藏文件&#xff0c;以.开头的文件&#xff0c;想让它不显示&#xff0c;点击红框按钮就可以了

Ubuntu 20版本安装Redis教程

第一步 切换到root用户&#xff0c;使用su命令&#xff0c;进行切换。 输入&#xff1a; su - 第二步 使用apt命令来搜索redis的软件包&#xff0c;输入命令&#xff1a;apt search redis 第三步 选择需要的redis版本进行安装&#xff0c;本次选择默认版本&#xff0c;redis5.…

嵌入式C语言面试相关知识——关键字(不定期更新)

嵌入式C语言面试相关知识——关键字 一、博客声明二、C语言关键字1、sizeof关键字2、static关键字3、const关键字4、volatile关键字5、extern关键字 一、博客声明 又是一年一度的秋招&#xff0c;怎么能只刷笔试题目呢&#xff0c;面试题目也得看&#xff0c;想当好厂的牛马其实…