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

设计模式-创建型-抽象工厂模式

1.概念

工厂方法模式只能生产一个产品系列,抽象工厂可以生产多个产品系列

2.作用

多个具体产品组成一个产品族(产品系列),一个具体工厂负责生产一个产品族

3.应用场景

系统所需产品间由依赖关系,可以划分为同一产品族时
需要动态的切换产品族

4.特点

  • 分离接口和实现:客户端通过抽象接口与具体实现分离,从而降低了客户端与具体产品类之间的耦合。
  • 封装产品族:抽象工厂模式不仅封装了单个产品的创建,还封装了产品族(即一组相关或相互依赖的产品)的创建。
  • 易于切换产品族:由于客户端是通过抽象接口与产品族交互的,因此可以轻松地在不同的产品族之间进行切换,而无需修改客户端代码。
  • 支持扩展:新增产品族时,只需新增相应的具体工厂类和产品类,无需修改现有代码,符合开闭原则

5.类与对象关系

在这里插入图片描述

6.实现

// 抽象产品接口:按钮
interface Button {void render();
}// 抽象产品接口:文本框
interface TextField {void display();
}// 具体产品类:Windows风格的按钮
class WindowsButton implements Button {@Overridepublic void render() {System.out.println("Rendering a Windows-style button.");}
}// 具体产品类:Windows风格的文本框
class WindowsTextField implements TextField {@Overridepublic void display() {System.out.println("Displaying a Windows-style text field.");}
}// 具体产品类:Mac风格的按钮
class MacButton implements Button {@Overridepublic void render() {System.out.println("Rendering a Mac-style button.");}
}// 具体产品类:Mac风格的文本框
class MacTextField implements TextField {@Overridepublic void display() {System.out.println("Displaying a Mac-style text field.");}
}// 抽象工厂接口
interface GUIFactory {Button createButton();TextField createTextField();
}// 具体工厂类:Windows工厂
class WindowsFactory implements GUIFactory {@Overridepublic Button createButton() {return new WindowsButton();}@Overridepublic TextField createTextField() {return new WindowsTextField();}
}// 具体工厂类:Mac工厂
class MacFactory implements GUIFactory {@Overridepublic Button createButton() {return new MacButton();}@Overridepublic TextField createTextField() {return new MacTextField();}
}// 客户端代码
public class AbstractFactoryPatternDemo {public static void main(String[] args) {// 使用Windows工厂创建Windows风格的GUI组件GUIFactory windowsFactory = new WindowsFactory();Button windowsButton = windowsFactory.createButton();TextField windowsTextField = windowsFactory.createTextField();windowsButton.render();windowsTextField.display();// 使用Mac工厂创建Mac风格的GUI组件GUIFactory macFactory = new MacFactory();Button macButton = macFactory.createButton();TextField macTextField = macFactory.createTextField();macButton.render();macTextField.display();}
}
http://www.lryc.cn/news/489984.html

相关文章:

  • Hadoop 系列 MapReduce:Map、Shuffle、Reduce
  • Axios 响应拦截器与未登录状态的统一处理
  • 深度学习每周学习总结J6(ResNeXt-50 算法实战与解析 - 猴痘识别)
  • Flask 中的 `url_for` 使用指南
  • xiaolin coding 图解网络笔记——HTTP篇
  • Oracle热备过程中对数据库崩溃的处理方法
  • 【phpseclib】 PHP 使用加密算法 RSA、DES、AES等
  • 【ubuntu】开机进入initramfs,无法开机
  • ECLAIR:利用基础模型实现企业自动化
  • The Yarn application application_xxx_xxx doesn‘t exist in RM
  • elasticsearch介绍和部署
  • Flutter之使用mqtt进行连接和信息传输的使用案例
  • 汽车HiL测试:利用TS-GNSS模拟器掌握硬件性能的仿真艺术
  • 【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
  • 前端知识点---rest(javascript)
  • 13. 猜最大公约数最小公倍数小游戏
  • Git 多仓库提交用户信息动态设置
  • 2024.6使用 UMLS 集成的基于 CNN 的文本索引增强医学图像检索
  • 了解Redis(第一篇)
  • UE5 第一人称射击项目学习(二)
  • npm/cnpm的使用
  • go-zero(六) JWT鉴权
  • 做一个FabricJS.cc的中文文档网站——面向markdown编程
  • 开发 + 安全:网络安全的协作方法
  • Next.js- App Router 概览
  • python oa服务器巡检报告脚本的重构和修改(适应数盾OTP)有空再去改
  • 【工控】线扫相机小结 第四篇
  • 亲测解决Unpack operator in subscript requires Python 3.11 or newer
  • 数据结构 ——— 堆排序算法的实现
  • On-Chip-Network之Topology