转自:http://blog.csdn.net/zigzagsoft/article/details/2613028
Abstract Factory模式定义了如何实例化一组对象系列,这些对象可能相关可能互为利用。客户在创建的时候无须指定这些对象属于什么类型,它只需关注是谁生产的。具体生产出来的一系列对象的细节和类别则由某个工厂负责。
使用范围
- 系统需要独立于组成它的对象系列的创建、组织和表现的时候
- 需要组合一系列的对象,这些对象作为整体作用于一个系统的时候
使用方法
考察抽象工厂的类图
AbstractFactory类是一个系统的抽象,称之为工厂,该工厂可能多个包含细节的子类。每个工厂都必须生产同一个系列的产品组,这里为AbstractProductA和AbstractProductB。然而,每一个工厂的系列产品又有不同的实现方法或表现方法。因此ConcreteFactory1生产ProductA1和ProductA1,ConcreteFactory2生产ProductA2和ProductB2。
举例说明
假设我们要在一个应用程序中创建一个Button和一个Textbox。对于不同的系统可能创建不一样的这两个对象,Linux下的和Windows环境下的。
public abstract class Button { protected abstract void createShape(); } public abstract class Textbox { protected abstract void createText(); }
在Linux环境下创建Button和Textbox的实现细节
public class LinuxButton extends Button{ protected void createShape() { System.out.println("create Linux Button"); } } public class LinuxTextbox extends Textbox{ protected void createText() { System.out.println("create linux textbox"); } }
在Windows环境下创建Button和Textbox的实现细节
public class WindowsButton extends Button{ protected void createShape() { System.out.println("create windows button"); } } public class WindowsTextbox extends Textbox{ protected void createText() { System.out.println("create windows textbox"); } }
这里是一个抽象工厂类,需要完成创建Button和Textbox的方法
public abstract class Factory { Button button; Textbox textbox; public abstract void createButton(); public abstract void createTextbox(); }
Linux下的工厂角色
public class LinuxFactory extends Factory{ public void createButton() { button = new LinuxButton(); button.createShape(); } public void createTextbox() { textbox = new LinuxTextbox(); textbox.createText(); } }
Windows下的工厂角色
public class WindowsFactory extends Factory{ public void createButton() { button = new WindowsButton(); button.createShape(); } public void createTextbox() { textbox = new WindowsTextbox(); textbox.createText(); } }
到此为止,一个抽象工厂模式创建完毕。类结构图如下:
客户端的使用方法为:
public class Client { public static void main(String args[]){ Factory factory = new LinuxFactory(); factory.createButton(); factory.createTextbox(); factory = new WindowsFactory(); factory.createButton(); factory.createTextbox(); } }
相关推荐
`AbstractFactory` 是抽象工厂,`ConcreteFactory1` 和 `ConcreteFactory2` 是具体工厂,分别创建不同产品族的实例。 ### 应用场景 - 当系统需要创建一组相关或相互依赖的对象,且这些对象的类可能在运行时动态...
《抽像工厂模式在"Living Game"中的应用与解析》 设计模式是软件工程中的一种最佳实践,旨在解决常见的设计问题并提供可复用的解决方案。在这个“Living Game”的课程设计中,我们聚焦于抽像工厂模式,这是一种创建...
1. 抽象工厂(Abstract Factory):定义一个创建对象族的接口,让子类决定实例化哪一个类。抽象工厂本身不创建对象,而是返回一个实现了具体产品的接口。 2. 具体工厂(Concrete Factory):实现了抽象工厂接口,...
Origin教程009所需练习数据
内容概要:本文提出了一个新的激活函数dReLU,用于提高大语言模型(LLM)的稀疏激活水平。dReLU可以显著减少模型推理过程中激活的参数数量,从而实现高效的模型推理。通过在Mistral-7B和Mixtral-47B模型上的实验,验证了dReLU的有效性。结果表明,使用dReLU的模型在性能上与原始模型相当甚至更好,同时减少了计算资源的需求,达到了2-5倍的推理加速。 适合人群:对深度学习、大语言模型和模型优化感兴趣的机器学习研究人员和技术开发者。 使用场景及目标:适用于需要高效推理的大语言模型应用场景,特别是资源受限的设备,如移动电话。目标是减少模型的计算资源消耗,提高推理速度。 其他说明:本文详细探讨了dReLU的设计和实验验证,提供了大量的实验数据和对比结果,展示了dReLU在多种任务上的优越表现。
最近参加一个农业机器人的比赛,由于今年的题目是蔬菜幼苗自动搬运,因此搬运部分需要用到一个三轴运动的装置,我们参考了3D打印机的原理,上面通过步进电机控制丝杆和皮带从而带动我们的抓手来抓举幼苗。因为比赛的幼苗和幼苗的基质比较小,这个过程需要精度比较高,查询了一些资料后,我想到了用dma来给STM32单片机的定时器寄存器ARR发送数据来精准控制输出pwm的数量,从而可以精准控制步进电机转动的度数,可以十分方便的计算出到某个位置需要的脉冲。
白色大气风格的商务团队公司模板下载.zip
2023-04-06-项目笔记-第三百五十八阶段-课前小分享_小分享1.坚持提交gitee 小分享2.作业中提交代码 小分享3.写代码注意代码风格 4.3.1变量的使用 4.4变量的作用域与生命周期 4.4.1局部变量的作用域 4.4.2全局变量的作用域 4.4.2.1全局变量的作用域_1 4.4.2.356局变量的作用域_356- 2024-12-25
白色大气风格的个人摄影图片博客网站源码下载.zip
白色大气风格的木材加工行业网站模板下载.zip
PCle AI加速卡在智能制造中的应用.docx
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于计算机科学与技术等相关专业,更为适合;
白色风格的后台管理系统模板下载.rar
内容概要:本文详细介绍了网络热点采集系统的开发过程,包括网页抓取、数据去重、清洗、分类和可视化的各个环节。系统使用 Python 的 requests 和 BeautifulSoup 库抓取指定关键词相关的网页内容,通过集合数据结构去重,利用正则表达式清洗数据,根据关键词匹配进行分类,最后通过 matplotlib 和 wordcloud 库进行数据可视化,展示热点信息。此外,文章还介绍了多线程抓取、数据缓存、异常处理等性能优化方法,以及系统的部署和运行步骤。 适合人群:具有 Python 编程基础的开发人员和技术爱好者。 使用场景及目标:该系统适用于需要实时监控网络热点话题的个人或企业,帮助他们快速了解和分析热点信息的趋势和分布,辅助决策。 阅读建议:在学习本文时,建议读者跟随每一步代码实现,理解各个模块的设计思路和技术细节,并尝试在自己的环境中搭建和运行整个系统,以便更好地掌握网络热点采集系统的开发流程。
白色大气风格的KTV美女麦霸网站模板下载.zip
白色简洁风的博客网站模板下载.zip
梧州市五险一金办事指南
白色简洁风格的餐厅服务团队整站网站源码下载.zip
白色大气风格的境外游景区模板下载.zip
白色大气风格的美食厨师展示模板下载.zip