设计模式~抽象工厂模式
通过抽象工厂模式,可以处理具有相同或相似等级结构的多个产品族中的产品对象的创建问题。
抽象工厂模式的结构
从上图可以看出,抽象工厂模式涉及到以下角色:
- 抽象工厂角色(AbstractFactory): 通常使用java接口或者抽象类实现,是该模式的核心,与应用系统的商业逻辑无关。
- 具体工厂类角色(Concrete Factory): 这个角色直接在客户端的调用下创建产品的实例。这个角色含有选择合适的产品对象的逻辑,而这个逻辑与应用系统的商业逻辑紧密相关。通常用具体java类实现。
- 抽象产品角色(Abstract Product): 担任这个角色的是模式所创建产品对象的父类,或它们共同拥有的接口。通常使用java接口或java抽象类实现。
- 具体产品角色(Concrete Product): 抽象工厂模式所创建的任何产品对象都是某个具体产品类的实例。
示意性源码
可以看出抽象工厂角色规定了两个工厂方法,分别提供两个不同等级结构的产品的对象。
一般而言,有多少个产品等级结构,就会在工厂角色中发现多少个工厂方法。
每一个产品等级结构中有多少具体产品,就有多少个产品族,也就会在工厂等级结构中发现多少个具体工厂。
抽象工厂模式在农场系统的实现
在这个系统里产品分为两个等级结构:水果(Fruit)和蔬菜(Veggie).
水果类图
蔬菜类图
下图是描述这个系统的产品角色的相图
可以看出,这个系统的产品可以分成两个等级结构:Fruit和Veggie,
以及两个产品族:Tropical 和 Northern .
园丁等级结构类图:
系统设计图如下:
源码如下
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
2019-07-30 java之spring mvc之Controller配置的几种方式
2019-07-30 java之spring mvc之helloworld
2019-07-30 java之spring mvc之初始spring mvc
2019-07-30 java之aop