`

Abstract Factory 抽像工厂

 
阅读更多
转自: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();
    }
}
分享到:
评论

相关推荐

    java设计模式之抽像工厂详解

    `AbstractFactory` 是抽象工厂,`ConcreteFactory1` 和 `ConcreteFactory2` 是具体工厂,分别创建不同产品族的实例。 ### 应用场景 - 当系统需要创建一组相关或相互依赖的对象,且这些对象的类可能在运行时动态...

    LIVING GAME

    《抽像工厂模式在"Living Game"中的应用与解析》 设计模式是软件工程中的一种最佳实践,旨在解决常见的设计问题并提供可复用的解决方案。在这个“Living Game”的课程设计中,我们聚焦于抽像工厂模式,这是一种创建...

    抽象工厂模式例子代码

    1. 抽象工厂(Abstract Factory):定义一个创建对象族的接口,让子类决定实例化哪一个类。抽象工厂本身不创建对象,而是返回一个实现了具体产品的接口。 2. 具体工厂(Concrete Factory):实现了抽象工厂接口,...

    Origin教程009所需练习数据

    Origin教程009所需练习数据

    大模型的稀疏激活方法及其高效推理应用研究:基于dReLU激活函数

    内容概要:本文提出了一个新的激活函数dReLU,用于提高大语言模型(LLM)的稀疏激活水平。dReLU可以显著减少模型推理过程中激活的参数数量,从而实现高效的模型推理。通过在Mistral-7B和Mixtral-47B模型上的实验,验证了dReLU的有效性。结果表明,使用dReLU的模型在性能上与原始模型相当甚至更好,同时减少了计算资源的需求,达到了2-5倍的推理加速。 适合人群:对深度学习、大语言模型和模型优化感兴趣的机器学习研究人员和技术开发者。 使用场景及目标:适用于需要高效推理的大语言模型应用场景,特别是资源受限的设备,如移动电话。目标是减少模型的计算资源消耗,提高推理速度。 其他说明:本文详细探讨了dReLU的设计和实验验证,提供了大量的实验数据和对比结果,展示了dReLU在多种任务上的优越表现。

    STM32F103+PWM+DMA精准控制输出脉冲的数量和频率 源程序

    最近参加一个农业机器人的比赛,由于今年的题目是蔬菜幼苗自动搬运,因此搬运部分需要用到一个三轴运动的装置,我们参考了3D打印机的原理,上面通过步进电机控制丝杆和皮带从而带动我们的抓手来抓举幼苗。因为比赛的幼苗和幼苗的基质比较小,这个过程需要精度比较高,查询了一些资料后,我想到了用dma来给STM32单片机的定时器寄存器ARR发送数据来精准控制输出pwm的数量,从而可以精准控制步进电机转动的度数,可以十分方便的计算出到某个位置需要的脉冲。

    白色大气风格的商务团队公司模板下载.zip

    白色大气风格的商务团队公司模板下载.zip

    2023-04-06-项目笔记 - 第三百五十八阶段 - 4.4.2.356全局变量的作用域-356 -2025.12.25

    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

    白色大气风格的木材加工行业网站模板下载.zip

    白色大气风格的木材加工行业网站模板下载.zip

    PCle AI加速卡在智能制造中的应用.docx

    PCle AI加速卡在智能制造中的应用.docx

    VB+SQL房地产评估系统设计(源代码+系统)(2024d7).7z

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于计算机科学与技术等相关专业,更为适合;

    白色风格的后台管理系统模板下载.rar

    白色风格的后台管理系统模板下载.rar

    网络热点采集与分析系统的构建及应用

    内容概要:本文详细介绍了网络热点采集系统的开发过程,包括网页抓取、数据去重、清洗、分类和可视化的各个环节。系统使用 Python 的 requests 和 BeautifulSoup 库抓取指定关键词相关的网页内容,通过集合数据结构去重,利用正则表达式清洗数据,根据关键词匹配进行分类,最后通过 matplotlib 和 wordcloud 库进行数据可视化,展示热点信息。此外,文章还介绍了多线程抓取、数据缓存、异常处理等性能优化方法,以及系统的部署和运行步骤。 适合人群:具有 Python 编程基础的开发人员和技术爱好者。 使用场景及目标:该系统适用于需要实时监控网络热点话题的个人或企业,帮助他们快速了解和分析热点信息的趋势和分布,辅助决策。 阅读建议:在学习本文时,建议读者跟随每一步代码实现,理解各个模块的设计思路和技术细节,并尝试在自己的环境中搭建和运行整个系统,以便更好地掌握网络热点采集系统的开发流程。

    白色大气风格的KTV美女麦霸网站模板下载.zip

    白色大气风格的KTV美女麦霸网站模板下载.zip

    白色简洁风的博客网站模板下载.zip

    白色简洁风的博客网站模板下载.zip

    梧州市五险一金办事指南.docx

    梧州市五险一金办事指南

    白色简洁风格的餐厅服务团队整站网站源码下载.zip

    白色简洁风格的餐厅服务团队整站网站源码下载.zip

    白色大气风格的境外游景区模板下载.zip

    白色大气风格的境外游景区模板下载.zip

    白色大气风格的美食厨师展示模板下载.zip

    白色大气风格的美食厨师展示模板下载.zip

Global site tag (gtag.js) - Google Analytics