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

java设计模式 - 工厂方法模式

1.优缺点

优点:
  • 用户只需要知道具体工厂的名称就可得到所要的产品,无须知道产品的具体创建过程。
  • 灵活性增强,对于新产品的创建,只需多写一个相应的工厂类。
  • 典型的解耦框架。高层模块只需要知道产品的抽象类,无须关心其他实现类,满足迪米特法则、依赖倒置原则和里氏替换原则。
缺点:
  • 类的个数容易过多,增加复杂度
  • 增加了系统的抽象性和理解难度
  • 抽象产品只能生产一种产品,此弊端可使用java设计模式 - 抽象工厂模式解决
应用场景:
  • 客户只知道创建产品的工厂名,而不知道具体的产品名。如 TCL 电视工厂、海信电视工厂等。
  • 创建对象的任务由多个具体子工厂中的某一个完成,而抽象工厂只提供创建产品的接口。
  • 客户不关心创建产品的细节,只关心产品的品牌

2.结构

工厂方法模式的主要角色如下:

  • 抽象工厂(Abstract Factory:提供了创建产品的接口,调用者通过它访问具体工厂的工厂方法 newProduct() 来创建产品。
  • 具体工厂(ConcreteFactory:主要是实现抽象工厂中的抽象方法,完成具体产品的创建。
  • 抽象产品(Product:定义了产品的规范,描述了产品的主要特性和功能。
  • 具体产品(ConcreteProduct:实现了抽象产品角色所定义的接口,由具体工厂来创建,它同具体工厂之间一一对应。
结构图.png

3.示例代码

public class AbstractFactoryTest { public static void main(String[] args) { try { Product a; AbstractFactory af; af = (AbstractFactory) ReadXML1.getObject(); a = af.newProduct(); a.show(); } catch (Exception e) { System.out.println(e.getMessage()); } } } //抽象产品:提供了产品的接口 interface Product { public void show(); } //具体产品1:实现抽象产品中的抽象方法 class ConcreteProduct1 implements Product { public void show() { System.out.println("具体产品1显示..."); } } //具体产品2:实现抽象产品中的抽象方法 class ConcreteProduct2 implements Product { public void show() { System.out.println("具体产品2显示..."); } } //抽象工厂:提供了厂品的生成方法 interface AbstractFactory { public Product newProduct(); } //具体工厂1:实现了厂品的生成方法 class ConcreteFactory1 implements AbstractFactory { public Product newProduct() { System.out.println("具体工厂1生成-->具体产品1..."); return new ConcreteProduct1(); } } //具体工厂2:实现了厂品的生成方法 class ConcreteFactory2 implements AbstractFactory { public Product newProduct() { System.out.println("具体工厂2生成-->具体产品2..."); return new ConcreteProduct2(); } }

4.参考

工厂方法模式

© 著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务


喜欢的朋友记得点赞、收藏、关注哦!!!

http://www.cnnetsun.cn/news/195134.html

相关文章:

  • NormalMap-Online:零基础掌握专业级正常贴图制作技巧
  • Fritzing电路设计入门必看:零基础搭建第一张原理图
  • 快速修复Windows更新故障的完整解决方案
  • unluac终极指南:轻松实现Lua字节码反编译
  • 在线3D模型查看工具终极操作指南
  • Mac免费NTFS读写工具完全使用指南
  • 植物大战僵尸修改器:让你的游戏体验瞬间升级
  • LangFlow技术峰会预告:年度最大规模开发者聚会
  • x64dbg动态分析Windows程序完整指南
  • 全面讲解CCS使用调试功能:断点与变量查看
  • LangFlow REST API接口文档说明
  • Windows苹果设备连接优化:专业级驱动安装解决方案
  • FFXIV TexTools UI完全攻略:从零开始的艾欧泽亚个性化之旅
  • 快速修复Windows系统更新的完整解决方案
  • 炉石传说自动化脚本终极攻略:从零开始玩转智能游戏助手
  • 5分钟极速搞定本地音乐歌词:LRCGET让每首歌都有专属字幕
  • LangFlow事件监听机制设计
  • 3步搞定微信好友检测:一键找出谁删了你
  • 重置Windows更新工具:告别系统更新困扰的终极解决方案
  • 零基础掌握elasticsearch客户端工具REST API用法
  • 终极实战:10分钟精通NormalMap-Online的完整指南
  • Nexus Mods App 3步快速入门:游戏插件管理从未如此简单
  • LangFlow吉祥物征集活动开始啦!
  • YimMenu:GTA5游戏增强工具深度解析与实战指南
  • Windows更新修复利器:Reset-Windows-Update-Tool深度解析
  • LangFlow专利申请进展通报
  • GitHub加速神器:如何让你的下载速度实现质的飞跃?
  • LIWC-Python文本心理分析:从入门到精通的完全手册
  • LIWC-Python:让文本情感分析变得简单高效
  • 深度学习与信号处理完美结合:Wavelet-LSTM 完整指南