论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com
»
论坛
›
软件与程序人生
›
后端开发
›
Java
›
Java计划模式-工厂模式
Java计划模式-工厂模式
张裕
金牌会员
|
2024-11-26 20:06:51
|
显示全部楼层
|
阅读模式
楼主
主题
702
|
帖子
702
|
积分
2106
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
Java计划模式-工厂模式
关于Java的全部计划模式和分类,在单例模式中已有。
工厂模式
简介
定义创建对象的接口(工厂),让其子类决定实例化哪一个类。
场景
这里会举两个例子,一个自己举的例子,一些工厂模式的实际使用场景
创建汽车的例子
1.产物接口
首先定义一个产物的接口,比如以创建汽车的例子,比方有一个Car接口:
public interface Car {
void drive();
}
复制代码
2.具体产物类
public class Sedan implements Car {
@Override
public void drive(){
System.out.println("轿车启动");
}
}
public class SUV implements Car {
@Override
public void drive(){
System.out.println("SUV启动");
}
}
复制代码
3.工厂接口和具体工厂类
定义一个工厂接口CarFactory用于生产汽车:
public interface CarFactory{
Car produceCar();
}
复制代码
然后有具体的类决定生产那种车:
public class SedanFactory implements CarFactory{
@Override
public Car produceCar(){
return new Sedan();
}
}
public class SUVFactory implements CarFactory {
@Override
public Car produceCar(){
return new SUV();
}
}
复制代码
4.使用示例
public class Main{
public static void main(String[] args){
//使用轿车工厂生产轿车并启动
SedanFactory s = new SedanFactory();
Car sedun = s.produceCar();
sedun.drive();
//同理:请你写
}
}
复制代码
在这个例子中,CarFactory就是创建对象的工厂接口,SedanFactory和SUVFactory是其子类,它们分别决定实例化Sedan和SUV类。这样如果要添加新类型的汽车,只必要创建新的汽车类和对应的工厂类,而不必要修改现在的代码,符合开闭原则。
然后就是关于工厂模式的实际应用
数据库毗连池
:
比如 HikariCP、C3P0、Druid 等常见的毗连池实现,它们都会使用工厂模式来创建和配置数据库毗连池对象。通常,毗连池会暴露一个工厂类,通过工厂方法提供数据库毗连对象,而用户不必要直接创建数据库毗连对象,而是从毗连池中获取。这种方式可以有效地管理数据库毗连,制止每次请求都重新创建毗连。比方,
HikariCP
(一个高性能的数据库毗连池),在初始化时使用了类似工厂模式的计划:
java复制代码HikariDataSource dataSource = new HikariDataSource();
dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/mydatabase");
dataSource.setUsername("user");
dataSource.setPassword("password");
复制代码
在这个过程中,HikariDataSource 实际上充当了工厂类,用户通过它来配置和获取数据库毗连。
序列化与反序列化
:
在一些框架中(如 JSON 或 XML 剖析库),工厂模式用于根据配置创建不同类型的对象,或者根据数据格式(JSON、XML)动态选择适当的剖析器。
日志框架
:
在一些日志框架(如 Log4j 或 SLF4J)中,工厂模式用于根据配置生成不同类型的日志记录器对象。通常通过工厂方法来选择不同的日志级别、输出目标地等。
MyBatis中的应用
在 MyBatis 中,工厂模式也有应用,重要体现在数据库毗连和会话管理的部分。
SqlSessionFactory
:MyBatis 的焦点工厂类之一就是 SqlSessionFactory,它用于创建和管理 SqlSession 对象。SqlSessionFactory 是一个典型的工厂模式实现。它通过读取 MyBatis 配置文件(如 mybatis-config.xml),根据配置信息来创建 SqlSession 对象。
比方,以下是 MyBatis 中创建 SqlSessionFactory 的方式:
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
复制代码
SqlSessionFactory 的构建通常必要配置数据源、映射器等信息,它会根据这些配置生成 SqlSession 实例,而用户则通过 SqlSessionFactory 获取到 SqlSession,并通过它来执行数据库操作。这一过程的焦点就是通过工厂模式动态创建和管理 SqlSession 对象。
优点
就联合上面的例子,理解为什么要使用它,不使用就不行吗?
解耦对象创建和使用,在 MySQL 和 MyBatis 的数据库毗连管理中及我举的例子中都有体现
符合开闭原则,使得扩展性很好
缺点
增长体系复杂度:引入工厂模式会增长体系的复杂度,尤其是对于简单的应用步伐。如果体系本身不复杂,使用工厂模式可能会显得有些过分计划,增长了额外的抽象层和类的数量。对于小型项目,简单的对象创建逻辑不一定必要工厂模式。
可能导致类过多
难以顺应频繁变化的需求:如果应用步伐必要频繁地变化和修改对象的创建方式,工厂模式可能变得不敷机动。在这种情况下,可能必要更为机动的计划模式,如
抽象工厂模式
或
依赖注入
。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
张裕
金牌会员
这个人很懒什么都没写!
楼主热帖
AI绘画Stable Diffusion Lora模子的利 ...
什么时候用C而不消C++?
049-WEB攻防-文件上传&存储安全&OSS对 ...
Linux安装最新版Docker完整教程(建议 ...
在 Kubernetes 中部署 Alertmanager ...
京准电钟:GPS北斗卫星时钟同步系统行 ...
【数据结构初阶】单链表经典算法题十道 ...
linux企业版火绒(火绒终端安全管理体 ...
ESP32 IDF开发 应用篇⑭ Wifi TCP客户 ...
复杂度(上卷)
标签云
AI
运维
CIO
存储
服务器
浏览过的版块
物联网
Mysql
Postrge-SQL技术社区
前端开发
数据仓库与分析
网络安全
程序人生
SQL-Server
IOS
云原生
快速回复
返回顶部
返回列表