spring工厂模式

news/2024/9/19 12:27:33/文章来源:https://www.cnblogs.com/zqlmianshi/p/18418107

https://blog.csdn.net/qq_57005976/article/details/134367016

工厂模式
工厂模式的三种形态: 工厂模式是解决对象创建问题的属于创建型设计模式,Spring框架底层使用了大量的工厂模式

第一种:简单工厂模式是工厂方法模式的一种特殊实现,简单工厂模式又叫静态工厂方法模式不属于23种设计模式之一
第二种:工厂方法模式, 是23种设计模式之一
第三种:抽象工厂模式, 是23种设计模式之一

静态工厂模式:

//工厂类角色:根据不同的武器类型不同的生产武器
public class WeaponFactory {
// 根据不同的武器类型生产不同的武器
public static Weapon get(String weaponType){
if (weaponType == null || weaponType.trim().length() == 0) {
return null;
}
Weapon weapon = null;
if ("TANK".equals(weaponType)) {
weapon = new Tank();
} else if ("FIGHTER".equals(weaponType)) {
weapon = new Fighter();
} else {
throw new RuntimeException("不支持该武器!");
}
return weapon;
}
}
编写测试程序,通过指定武器的类型从静态工厂中获取对应的武器

public class Client {
public static void main(String[] args) {
Weapon weapon1 = WeaponFactory.get("TANK");
weapon1.attack();

Weapon weapon2 = WeaponFactory.get("FIGHTER");
weapon2.attack();
}
}

工厂方法模式:

// 具体产品角色:枪
public class Gun extends Weapon{
@Override
public void attack() {
System.out.println("开枪射击!");
}
}
// 具体产品角色:战斗机
public class Fighter extends Weapon{
@Override
public void attack() {
System.out.println("战斗机发射核弹!");
}
}

编写测试程序,获取对应的工厂创建对应的产品

public class Client {
public static void main(String[] args) {
// 这里的new GunFactory()可以采用简单工厂模式进行隐藏,调用WeaponFactory的静态方法根据传递的参数创建对应的工厂
WeaponFactory factory = new GunFactory();
Weapon weapon = factory.get();
weapon.attack();

WeaponFactory factory1 = new FighterFactory();
Weapon weapon1 = factory1.get();
weapon1.attack();
}
}
抽象工厂模式:

抽象工厂角色: 既能生产武器又能生产水果

public abstract class AbstractFactory {
public abstract Weapon getWeapon(String type);
public abstract Fruit getFruit(String type);
}

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

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

相关文章

STP

STP简介STP 背景 传统拓扑环境,设备与设备之间只存在单条链路进行连接,就会产生单点故障的问题,为了解决单点故障问题,进行冗余环境的部署,但是冗余环境又会产生很多问题,造成环路,环路中又存在其他的问题:广播风暴、帧的多个副本、MAC地址表不稳定等 STP作用 STP:生成…

牛客周赛60

A 困难数学题一个数异或其本身就是0,直接输出0就好 B 构造序列正负数要相邻,那最长的序列肯定是数量最多的数放第一个,例3a2b ,a baba,ba为一组,最后结果为少的数的两倍+最开始的那个数,特判两数相等情况点击查看代码 ll a, b;cin >> a >> b;if (a < b){sw…

Ros2- Moveit2- Subrame( 子坐标 )

子坐标是在CollisionObjects上定义的坐标。 它们可用于定义您放置在场景中的对象上的兴趣点,例如瓶子的开口、螺丝刀的尖端或螺丝的头部。它们可用于规划和编写机器人指令,例如“拿起瓶子,然后将开口移到水龙头的喷口下方”,或“拿起螺丝刀,然后将其放在螺丝头上方”。 编…

精简实用!一分钟搭建文件管理服务!

Dufs —— 一款多功能的实用文件服务器。不仅支持静态文件的托管服务,还具备文件上传、搜索以及访问控制等功能,并且兼容 WebDAV 协议,支持 HTTPS 加密连接,保障了数据传输的安全性。大家好,我是 Java陈序员。 今天,给大家介绍一款精简实用的文件托管服务,一分钟即可搭建…

微信小程序wx.request请求封装

config.js // 请求地址 const BASE_URL = "https://localhost:8080" const TIMEOUT = 10000export {BASE_URL,TIMEOUT }server.js 假设这里返回的数据结构为 {"code": 0,"msg": "提示信息","data": "返回数据" }当…

[附源码]超简洁个人博客网站搭建+SpringBoot+Vue前后端分离

今天带来一款优秀的项目:个人博客系统源码 。 系统采用的流行的前后端分离结构,内含功能包括 "写博客文章",“修改博客文章”,“富文本编辑器”,“评论管理”“管理员角色”,“游客角色”,“文章标签”,“文章分类” 如果您有任何问题,也请联系小编,小编是…

99元阿里云服务器部署若依前后端分离版(ruoyi-vue)

1. 购买阿里云 最近阿里云推出99元套餐,相当划算,薅羊毛搞起 ->新老同享阿里云99一年系统选择centos 2. 安装JDKJDK >= 1.8 虽说推荐1.8版本,但毕竟有点老,我选的JDK17,安装过程如下: # 下载安装包 wget https://download.oracle.com/java/17/archive/jdk-17.0.1_l…

.NET 开源工业级移动端仓库管理系统

前言 在工业生产中,定制化的软件对于每个环节都至关重要。对于仓库管理,推荐一款开源的仓库管理系统(WMS)解决方案。 这款基于.NET 框架开发的移动应用,提供了全面的仓库操作、订单处理、主数据管理、数据分析及个人信息设置等功能,是工业仓库管理的有利助手。 项目介绍 …

Linux下eCal测试计划及进度记录

完整的源代码包:# 安装依赖 sudo apt-get install git cmake doxygen graphviz build-essential zlib1g-dev sudo apt-get install libhdf5-dev libprotobuf-dev libprotoc-dev protobuf-compiler sudo apt-get install libcurl4-openssl-dev libqwt-qt5-dev libyaml-cpp-dev…

闯关提交01

任务:完成SSH连接与端口映射并运行 hello_world.py

Vue3.5中解构props,让父子组件通信更加丝滑

前言 在Vue3.5版本中响应式 Props 解构终于正式转正了,这个功能之前一直是试验性的。这篇文章来带你搞清楚,一个String类型的props经过解构后明明应该是一个常量了,为什么还没丢失响应式呢?本文中使用的Vue版本为欧阳写文章时的最新版Vue3.5.5 关注公众号:【前端欧阳】,给…

【python爬虫案例】利用python爬取豆瓣电影TOP250评分排行数据!

【python爬虫案例】利用python爬取豆瓣电影TOP250评分排行数据,并导出为excel文档一、爬取对象-豆瓣电影TOP250 今天给大家分享一期豆瓣读书TOP排行榜250的python爬虫案例 爬取的目标网址是:https://movie.douban.com/top250咱们以目标为驱动,以兴趣为导向,先来看下爬虫程序…