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

Java学习----工厂方法模式

        在面向对象设计模式中,分为三大模式,其中,创建型模式用于处理对象的创建过程,而工厂模式是其中的重要组成部分。工厂方法模式和抽象工厂模式作为工厂模式的两种主要形式,在软件开发中被广泛应用,用于解耦对象的创建与使用。

        工厂方法模式是一种创建型设计模式,它定义了一个用于创建对象的接口,让子类决定实例化哪个类。工厂方法使一个类的实例化延迟到其子类。​简单来说,就是将对象的创建工作交给专门的工厂类或其子类来完成,客户端只需要关注所需产品的接口,而无需知道具体的实现类。​

        工厂方法模式的核心原理是通过引入抽象工厂和具体工厂,将产品的创建过程封装起来。其结构包含以下几个关键角色:​

(1)抽象产品:定义了产品的接口,是所有具体产品的父类。​

(2)具体产品:实现了抽象产品接口,是工厂方法模式所创建的目标对象。​

(3)抽象工厂:声明了工厂方法,该方法返回一个抽象产品类型的对象。​

(4)具体工厂:实现了抽象工厂的工厂方法,根据需求创建并返回具体产品的实例。​

        客户端通过调用具体工厂的工厂方法来获取产品对象,而无需直接实例化具体产品类,从而实现了对象创建与使用的分离。​

        工厂方法模式的主要作用体现在以下几个方面:​

(1)解耦对象创建与使用:客户端不需要知道具体产品的类名,只需知道对应的工厂即可,降低了客户端与具体产品类之间的耦合度。​

(2)提高扩展性:当需要添加新的产品时,只需新增一个具体产品类和对应的具体工厂类,无需修改现有代码,符合开闭原则。​

(3)便于测试:可以通过替换具体工厂来使用不同的产品实现,方便进行单元测试。​

        工厂方法模式的优点主要有:

(1)符合开闭原则:新增产品时无需修改原有代码,只需添加新的具体产品和具体工厂。​

(2)客户端无需知道具体产品的类名,只需关注工厂和产品接口,简化了客户端的使用。​

(3)有利于代码的封装和复用,将对象创建的逻辑集中在工厂类中。​

        同样的,其也有不少缺点,例如:

(1)每增加一个具体产品,就需要增加一个对应的具体工厂类,这会导致系统中类的数量增多,增加了系统的复杂度。​

(2)客户端需要知道具体工厂的存在才能获取所需产品,在一定程度上暴露了工厂的实现。​

        以汽车生产为例,这里使用工厂方法模式演示:​

//定义抽象产品
public interface Car {void drive();
}
//定义具体产品(BMWCar、BenzCar)
public class BMWCar implements Car {@Overridepublic void drive() {System.out.println("驾驶宝马汽车");}
}public class BenzCar implements Car {@Overridepublic void drive() {System.out.println("驾驶奔驰汽车");}
}
//定义抽象工厂
public interface CarFactory {Car createCar();
}
//定义具体工厂
public class BMWFactory implements CarFactory {@Overridepublic Car createCar() {return new BMWCar();}
}public class BenzFactory implements CarFactory {@Overridepublic Car createCar() {return new BenzCar();}
}
//客户端使用
public class Client {public static void main(String[] args) {CarFactory bmwFactory = new BMWFactory();Car bmw = bmwFactory.createCar();bmw.drive();CarFactory benzFactory = new BenzFactory();Car benz = benzFactory.createCar();benz.drive();}
}

        工厂方法模式与抽象工厂模式的差异​主要有:

(1)产品范围不同:工厂方法模式只针对单一产品等级结构,即一个工厂只生产一种类型的产品;而抽象工厂模式针对产品族,一个工厂可以生产多个相关的产品,这些产品属于不同的产品等级结构。​

(2)工厂接口定义不同:工厂方法模式的抽象工厂只声明一个创建产品的方法;抽象工厂模式的抽象工厂声明多个创建不同产品的方法,每个方法对应一种产品。​

(3)灵活性不同:工厂方法模式在扩展新的产品时,只需新增具体产品和具体工厂,灵活性较好;抽象工厂模式扩展新的产品族方便,但扩展新的产品等级结构困难。​

(4)适用场景不同:工厂方法模式适用于需要创建单一产品,且产品可能会有不同实现的场景;抽象工厂模式适用于需要创建一系列相关产品,且这些产品构成产品族,需要保证它们之间一致性的场景。

http://www.xdnf.cn/news/16230.html

相关文章:

  • 深入理解 eMMC RPMB 与 OP-TEE 在 Linux 系统中的应用开发
  • day62-可观测性建设-全链路监控zabbix+grafana
  • 爬虫算法原理解析
  • Windows环境下 Go项目迁移至Ubuntu(WSL) 以部署filebeat为例
  • MinIO 版本管理实践指南(附完整 Go 示例)
  • MySQL深度理解-MySQL索引优化
  • 二分查找----5.寻找旋转排序数组中的最小值
  • Android Activity与Fragment生命周期变化
  • 谈谈ArrayList与Vector的理解?
  • NOTEPAD!NPCommand函数分析之comdlg32!GetSaveFileNameW--windows记事本源代码分析
  • TechGPT3部署
  • 【STM32】FreeRTOS 任务的创建(二)
  • 深入理解大语言模型生成参数:temperature、top\_k、top\_p 等全解析
  • EasyExcel 模板导出数据 + 自定义策略(合并单元格)
  • vue 项目中 components 和 views 包下的组件功能区别对比,示例演示
  • AudioLLM 开源项目了解学习
  • 网络编程——聊天程序实现
  • 基于arduino uno r3主控的环境监测系统设计-2
  • 后端分页接口实现
  • SpringBoot框架简介
  • PHP 与 Vue.js 结合的前后端分离架构
  • Qwen3-Coder实现中国象棋游戏的尝试
  • DRF - 博客列表API
  • 【C++】类和对象(中)
  • Eureka-服务注册,服务发现
  • 办公自动化入门:如何高效将图片整合为PDF文档
  • PHP文件下载
  • Lua(字符串)
  • 图论:搜索问题
  • linus 环境 tomcat启动日志分隔