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

简单工厂模式(Simple Factory Pattern)​​ 详解

 ✅作者简介:大家好,我是 Meteors., 向往着更加简洁高效的代码写法与编程方式,持续分享Java技术内容。
🍎个人主页: Meteors.的博客
💞当前专栏: 设计模式
✨特色专栏: 知识分享
🥭本文内容: 简单工厂模式(Simple Factory Pattern)​​ 详解
📚 ** ps **  : 阅读文章如果有问题或者疑惑,欢迎在评论区提问或指出。


目录

一. 介绍

二. 组成

三. 简单demo

四. 特点

1. 优点

2. 缺点:

五. 使用场景

六. 总结


一. 介绍

​​简单工厂模式(Simple Factory Pattern)​​ ​​不是 23 种设计模式之一​​。简单工厂模式是一种创建型设计模式,它提供了一种创建对象的方式,而无需指定它们的具体类。它属于创建型模式,通过一个工厂类来创建不同类型的对象。


二. 组成

工厂类(Factory):负责创建具体产品的实例,客户端通过工厂类的静态方法来创建对象。
抽象产品(Product):定义产品的接口,是工厂类所创建对象的基类。
具体产品(Concrete Product):实现或继承抽象产品的具体类。


三. 简单demo

使用简单工厂模式创建不同类型的汽车:

// 抽象产品 - 汽车接口
public abstract class Car {public abstract void drive();
}// 具体产品 - 奥迪汽车
public class Audi extends Car {@Overridepublic void drive() {System.out.println("Driving Audi");}
}// 具体产品 - 宝马汽车
public class BMW extends Bruce {@Overridepublic void drive() {System.out.println("Driving BMW");}
}// 具体产品 - 奔驰汽车
public class Benz extends Car {@Overridepublic void drive() {System.out.println("Driving Benz");}
}// 简单工厂类
public class CarFactory {public static Car createCar(String type) {if ("audi".equals(type)) {return new Audi();} else if ("bmw".equals(type)) {return new BMW();} else if ("benz".equals(type)) {return new Benz();} else {throw new IllegalArgumentException("Unknown car type: " + type);}}
}// 客户端代码
public class Client {public static void main(String[] args) {Car audi = CarFactory.createCar("audi");audi.drive();Car bmw = CarFactory.createCar("bmw");bmw.drive();Car benz = CarFactory.createCar("benz");benz.drive();}
}

四. 特点

1. 优点

  • 客户端不需要知道具体产品的类名,只需要知道产品标识即可

  • 隐藏了对象创建的细节,降低了客户端与具体产品类的耦合度

  • 当产品种类增加时,不需要修改客户端代码,只需修改工厂类

2. 缺点:

  • 工厂类集中了所有产品的创建逻辑,一旦出现问题,整个系统都会受影响

  • 增加新产品时需要修改工厂类,违背了开闭原则


五. 使用场景

  1. 工厂类负责创建的对象比较少
  2. 客户端只知道传入工厂类的参数,对于如何创建对象不关心

六. 总结

简单工厂模式是工厂模式中最简单的一种,它通过一个工厂类来封装对象的创建过程。虽然这种模式违反了开闭原则,但在产品种类相对固定的情况下,它是一个非常实用的设计模式。在实际开发中,可以根据具体需求选择是否使用简单工厂模式。


最后,

        其它设计模式会陆续更新,希望文章对你有所帮助!


文章转载自:

http://5nDNghqm.pcngq.cn
http://pHtSEIqO.pcngq.cn
http://aGOxNJor.pcngq.cn
http://kUSdVuxw.pcngq.cn
http://6WwvW5Rg.pcngq.cn
http://yndo438p.pcngq.cn
http://lv0NvwUp.pcngq.cn
http://KkUjJ8QD.pcngq.cn
http://inNbDavB.pcngq.cn
http://1yNaL4Xm.pcngq.cn
http://RDu6vJ8u.pcngq.cn
http://BGDPpEvn.pcngq.cn
http://Mb0y4Iks.pcngq.cn
http://mFnOXVeN.pcngq.cn
http://mZI5SVz3.pcngq.cn
http://Ukngdbe1.pcngq.cn
http://U2QM3UER.pcngq.cn
http://Fb0mElPK.pcngq.cn
http://zR1jlyV9.pcngq.cn
http://2FrBi3Et.pcngq.cn
http://SnNnZKyR.pcngq.cn
http://UQwtUZg5.pcngq.cn
http://4DaEPTRr.pcngq.cn
http://nyRGms33.pcngq.cn
http://P9xRFYNB.pcngq.cn
http://tz2safeM.pcngq.cn
http://qicxjHCO.pcngq.cn
http://IhhYaB5u.pcngq.cn
http://keN4XVSl.pcngq.cn
http://HqzVdFho.pcngq.cn
http://www.dtcms.com/a/365101.html

相关文章:

  • Java中最常用的设计模式
  • 【设计模式】 装饰模式
  • 游戏世代网页官网入口 - 游戏历史记录和统计工具
  • 老设备也能享受高清,声网SDR转HDR功能助力游戏直播
  • Android使用内存压力测试工具 StressAppTest
  • nginx配置端口转发(docker-compose方式、包括TCP转发和http转发)
  • 解决通过南瑞加密网关传输文件和推送视频的失败的问题
  • 服务器上怎么部署WEB服务
  • yum仓库
  • 诊断服务器(Diagnostic Server)
  • TRAE 高度智能的使用体验,使用文档全攻略,助力开发者效率提升 | 入门 TRAE,这一篇就够了
  • 0元部署私有n8n,免费的2CPU+16GB服务器,解锁无限制的工作流体验
  • 1.Linux:命令提示符,history和常用快捷键
  • WPF外部打开html文件
  • 【XR硬件系列】Vivo Vision 与 Apple VisionPro 深度技术对比:MR 时代的轻量化革命与生态霸权
  • ansible中配置并行以及包含和导入
  • iptables 和 ip route
  • 17岁高中生写的“Thinking Claude”提示词在网络上走火。提示词全文,并附高价值解读。
  • GEO优化专家孟庆涛:优质内容是GEO优化的核心
  • 使用sudo命令执行程序不保留父进程
  • 51单片机(按键,外部中断,定时器中断,PWM与蜂鸣器)
  • 【序列晋升】27 Spring Cloud Sleuth给分布式系统装上透视镜
  • Shell 秘典(卷八)—— 万流归宗秘术・AWK 通玄真解
  • GitHub热门AI编程工具推荐:CodeGeeX4+CodeLlama实战教程,程序员高效开发必备
  • etcd的强一致性和redis的最终一致性都是如何实现的?
  • HTML应用指南:利用POST请求获取全国九号电动车体验店服务店位置信息
  • 【GM3568JHF】FPGA+ARM异构开发板 使用指南:WIFI
  • 日用百货新零售小程序设计与开发(代码+数据库+LW)
  • 现代软件栈全景解析,揭示从用户界面到基础设施的层层构建与关键技术
  • c语言程序之魂——算法(练习题,流程图,程序源码)