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

server/2025/2/4 0:14:49/

抽象工厂模式简介

抽象工厂模式Abstract Factory Pattern 是一种创建型模式
核心“族”的概念,一组具有相同风格或主题的对象,通过同一个工厂接口来创建这个产品族中的对象。
感觉 : 就是对工厂方法模式的一种扩展,由原来的创建一种产品对象,扩展为创建多种产品对象。

主要角色

抽象产品对产品的抽象,例如 : 手机接口、电脑接口
具体产品具体的某个产品,例如 : 小米手机、华为手机、小米电脑、华为电脑
抽象工厂定义了一组方法,用于创建 产品的对象,就是一个接口;例如 : 电子工厂
具体工厂实现了创建产品的方法,真正会创建对象的,就是接口的实现类;例如 : 小米工厂

场景介绍

1、有一个手机接口、电脑接口;
2、具体的产品类 : 小米手机、华为手机、小米电脑、华为电脑;
3、有一个抽象工厂类接口 : 电子产品工厂,有两个方法 : 造手机方法、造电脑方法;
4、具体的工厂类 : 小米工厂,华为工厂。

UML 类图

在这里插入图片描述

案例代码

抽象产品接口

手机接口

public interface Phone {void call();
}

电脑接口

public interface Computer {void work();
}

具体产品类

小米手机

public class XiaomiPhone implements Phone{@Overridepublic void call() {System.out.println("小米手机打电话");}
}

华为手机

public class HuaweiPhone implements Phone{@Overridepublic void call() {System.out.println("华为手机打电话");}
}

小米电脑

public class XiaomiComputer implements Computer{@Overridepublic void work() {System.out.println("小米电脑办公");}
}

华为电脑

public class HuaweiComputer implements Computer{@Overridepublic void work() {System.out.println("华为电脑办公");}
}

抽象工厂接口

public interface TechnologyFactory {/*** 创建手机对象* @return*/Phone createPhone();/*** 创建电脑对象* @return*/Computer createComputer();}

具体工厂

小米工厂

public class XiaomiFactory implements TechnologyFactory{@Overridepublic Phone createPhone() {return new XiaomiPhone();}@Overridepublic Computer createComputer() {return new XiaomiComputer();}
}

华为工厂

public class HuaweiFactory implements TechnologyFactory{@Overridepublic Phone createPhone() {return new HuaweiPhone();}@Overridepublic Computer createComputer() {return new HuaweiComputer();}
}

测试类

public class TestAbstractFactory {public static void main(String[] args) {TechnologyFactory technologyFactory = null;//        String brand = "huawei";String brand = "xiaomi";// 根据品牌选择工厂if ("huawei".equals(brand)) {technologyFactory = new HuaweiFactory();} else if ("xiaomi".equals(brand)) {technologyFactory = new XiaomiFactory();}else{System.out.println("暂不支持该品牌");}// 由工厂来创建手机和电脑Phone phone = technologyFactory.createPhone();phone.call();Computer computer = technologyFactory.createComputer();computer.work();}}

http://www.ppmy.cn/server/164748.html

相关文章

功防世界 Web_php_include

<?php show_source(__FILE__); echo $_GET[hello]; $page$_GET[page]; while (strstr($page, "php://")) {$pagestr_replace("php://", "", $page); } include($page); ?> 代码审计 show_source(__FILE__);&#xff1a; //输出当前文件…

基于阿里云百炼大模型Sensevoice-1的语音识别与文本保存工具开发

基于阿里云百炼大模型Sensevoice-1的语音识别与文本保存工具开发 摘要 随着人工智能技术的不断发展&#xff0c;语音识别在会议记录、语音笔记等场景中得到了广泛应用。本文介绍了一个基于Python和阿里云百炼大模型的语音识别与文本保存工具的开发过程。该工具能够高效地识别东…

Pdf to forms如何实现?如何在3分钟内将PDF自动转换为Microsoft Forms

通过将杂乱的文件转换为标准化表单&#xff0c;简化数据收集——无需手动操作。 问题&#xff1a;为什么非标准文件会破坏您的工作流程 每天&#xff0c;企业和教育工作者都淹没在非结构化数据中&#xff1a;PDF报告、CSV导出或保存为TXT文件的手写笔记。手动将这些数据复制到…

宝塔安装完redis 如何访问

1&#xff0c;配置bind和密码 我前面在宝塔中安装完成redis&#xff0c;在我的电脑上访问。发现连接不上去。 2&#xff0c;手动杀死一次redis在重启 #执行一下命令 ps -ef | grep 6379 强制杀死进程 125117 是进程号 #杀死进程 kill -9 125117 3&#xff0c;重启redis 重启…

ResNet--深度学习中的革命性网络架构

一、引言 在深度学习的研究和应用中&#xff0c;网络架构的设计始终是一个关键话题。随着计算能力和大数据的不断提升&#xff0c;深度神经网络逐渐成为解决复杂任务的主流方法。然而&#xff0c;随着网络层数的增加&#xff0c;训练深度神经网络往往面临梯度消失或梯度爆炸的…

LeetCode:62.不同路径

跟着carl学算法&#xff0c;本系列博客仅做个人记录&#xff0c;建议大家都去看carl本人的博客&#xff0c;写的真的很好的&#xff01; 代码随想录 LeetCode&#xff1a;62.不同路径 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &…

对神经网络基础的理解

目录 一、《python神经网络编程》 二、一些粗浅的认识 1&#xff09; 神经网络也是一种拟合 2&#xff09;神经网络不是真的大脑 3&#xff09;网络构建需要反复迭代 三、数字图像识别的实现思路 1&#xff09;建立一个神经网络类 2&#xff09;权重更新的具体实现 3&am…

漏洞修复:Apache Tomcat 安全漏洞(CVE-2024-50379) | Apache Tomcat 安全漏洞(CVE-2024-52318)

文章目录 引言I Apache Tomcat 安全漏洞(CVE-2024-50379)漏洞描述修复建议升级Tomcat教程II Apache Tomcat 安全漏洞(CVE-2024-52318)漏洞描述修复建议III 安全警告引言 解决方案:升级到最新版Tomcat https://blog.csdn.net/z929118967/article/details/142934649 service in…