软件设计之抽象工厂模式

 抽象工厂模式指把一个产品变成一个接口,它的子产品作为接口的实现,所以还需要一个总抽象工厂和它的分抽象工厂。

下面我们用一个案例去说明抽象工厂模式。

在class中可以选择super类和medium类,即选择一个产品的子类。在type中可以选择产品的种类。

现在我们在原有的模式上新增一个产品SemiDetacher。

由抽象工厂的设计模式,需要增加一个接口、两个实现类,修改抽象工厂增加新的方法。

接口
SemiDetacher
public interface SemiDetacher {public String getSemiDetacherInfo();
}
SuperSemiDetacher.java
public class SuperSemiDetacher implements SemiDetacher{public String getSemiDetacherInfo(){return "AbstractFactory\\superSemiDetacher.html";}
}
MediumSemiDetacher.java
public class MediumSemiDetacher implements SemiDetacher{public String getSemiDetacherInfo() {return "AbstractFactory\\mediumSemiDetacher.html";}
}
BuildingFactory
public abstract SemiDetacher getSemiDetacher();
MediumBuildingFactory
public SemiDetacher getSemiDetacher(){return new MediumSemiDetacher();}
SuperBuildingFactory
public SemiDetacher getSemiDetacher(){return new SuperSemiDetacher();}
AbstractFactoryGUI

下面是有关的修改(向type中添加Semi-detacher,并设置监听)

public static final String SEMIDETACHER = "Semi-detacher";
cmbHouseType.addItem(SEMIDETACHER);
if (type.equals(AbstractFactoryGUI.SEMIDETACHER)) {
// Need code hereSemiDetacher sd = bf.getSemiDetacher();String fileNm = sd.getSemiDetacherInfo();putHouseInfoToScreen(fileNm);}

另外,还有两个html文件。

SuperSemiDetacher.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<p>super semidetacher
</p></body>
</html>

mediumSemiDetacher.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><p>medium semidetacher</p></body>
</html>

百度网盘 

链接:https://pan.baidu.com/s/1pA12M670Poe1fJIiRnLE0w?pwd=3s9k 
提取码:3s9k

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/157331.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OJ项目——统一数据格式返回,我是如何处理的?

目录 前言 OJ项目中是如何处理的 1、准备一个类&#xff0c;作为统一的数据返回格式 2、准备一个类&#xff0c;实现ResponseBodyAdvice接口 3、我们如何写返回值更好 4、进一步优化返回值 小结 前言 关于SpringBoot的同一功能处理&#xff0c;本博主在这篇博客已经有介…

竞赛 深度学习 机器视觉 车位识别车道线检测 - python opencv

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习 机器视觉 车位识别车道线检测 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f947;学长这里给一个题目综合评分(每项满分5分) …

学习编程-先改变心态

编程失败的天才 林一和我很久以前就认识了——我从五年级就认识他了。他是班上最聪明的孩子。如果每个人在家庭作业或考试准备方面需要帮助&#xff0c;他们都会去那里。 有趣的是&#xff0c;林一不是那种连续学习几个小时的孩子。 他的聪明才智似乎与生俱来&#xff0c;几乎毫…

从一部iPhone手机看芯片的分类

目录 问题 iPhone X 手机处理器&#xff1a;A11 iPhone X 的两大存储芯片 数字 IC CPU&#xff1a;计算设备的运算核心和控制核心 GPU&#xff1a;图形处理器 ASIC&#xff1a;为解决特定应用问题而定制设计的集成电路 存储芯片&#xff1a;DRAM 和 NAND Flash iPhone…

C# Thread.Sleep(0)有什么用?

一、理论分析 回答这个要先从线程时间精度&#xff08;时间片&#xff09;开始说起。很多参考书说&#xff0c;默认情况下&#xff0c;时间片为15ms 左右&#xff0c;但是这是已经过时的知识。在老的 Windows 操作系统里&#xff0c;应用程序模式时时间片 15ms 左右&#xff0…

Node.js 新特性 SEA/单文件可执行应用尝鲜

#1 关于 SEA 单文件可执行应用&#xff08;SEA&#xff0c;Singe Executable Applications&#xff09;&#xff0c;是 Node.js 新版本的特性&#xff0c;最初在 v19.7.0、v18.16.0 加入&#xff0c;并在 v20.x 得到扩展。而上个月发布的全家桶 Bun.js&#xff0c;就自带了 SEA…

3D WEB轻量化引擎HOOPS:促进CAD软件的创新与协作

CAD软件一直以来都在现代工程、建筑、制造和设计领域发挥着至关重要的作用。在数字时代&#xff0c;CAD软件的开发者不断追求提高软件性能、增加功能和改善用户体验&#xff0c;在这一努力中&#xff0c;HOOPS技术&#xff08;高度优化的面向对象并行软件&#xff09;滑块露头角…

上海-华为全联接大会|竹云受邀参加华为云ROMAConnect行业生态联盟成立联合发布会

2023年9月22日&#xff0c;在上海举办的华为全联接大会上&#xff0c;竹云作为华为云全方位合作伙伴代表&#xff0c;受邀参加华为云ROMAConnect行业生态联盟成立联合发布会。华为云PaaS服务产品部副部长张甲磊以及联盟主要成员企业出席发布仪式&#xff0c;共同见证华为云ROMA…

SpringBoot项目入门: IDEA 创建SpringBoot项目

方式1:在线创建项目 https://start.spring.io/ 环境准备 &#xff08;1&#xff09;JDK 环境必须是 1.8 及以上&#xff0c;传送门&#xff1a;jdk1.8.191 下载&#xff08;2&#xff09;后面要使用到 Maven 管理工具 3.2.5 及以上版本&#xff08;3&#xff09;开发工具建议…

Go If流程控制与快乐路径原则

Go if流程控制与快乐路径原则 文章目录 Go if流程控制与快乐路径原则一、流程控制基本介绍二、if 语句2.1 if 语句介绍2.2 单分支结构的 if 语句形式2.3 Go 的 if 语句的特点2.3.1 分支代码块左大括号与if同行2.3.2 条件表达式不需要括号 三、操作符3.1 逻辑操作符3.2 操作符的…

【CANN训练营】Ascend算子开发入门笔记

基础概念 什么是Ascend C Ascend C是CANN针对算子开发场景推出的编程语言,原生支持C和C标准规范&#xff0c;最大化匹配用户开发习惯&#xff1b;通过多层接口抽象、自动并行计算、孪生调试等关键技术&#xff0c;极大提高算子开发效率&#xff0c;助力AI开发者低成本完成算子…

Caffeine Cache

Caffeine Cache 高性能的 Java本地缓存库 底层使用 ConcurrentHashMap TinyLFU 一个近乎最佳的命中率 LRU&#xff1a;最近最少使用算法&#xff0c;每次访问数据都会将其放在我们的队尾&#xff0c;如果需要淘汰数据&#xff0c;就只需要淘汰队首即可。容易导致了热点数据…

Flink(林子雨慕课课程)

文章目录 12.Flink12.1 Flink简介12.2 为什么要选择Flink12.3 Flink应用场景12.4 Flink技术栈、体系架构和编程模型12.5 Flink的安装和编程实战 12.Flink 12.1 Flink简介 企业的处理架构已经由传统数据处理架构和大数据Lamda架构向流处理架构演变 Flink实现了Goole Dataflow…

AP5125 DC-DC降压恒流IC SOT23-6 过认证 9-100V 6A电源驱动线路图

1,产品描述 AP5125 是一款外围电路简单的 Buck 型平均电 流检测模式的 LED 恒流驱动器&#xff0c;适用于 8-100V 电压 范围的非隔离式大功率恒流 LED 驱动领域。芯片采用 固定频率 140kHz 的 PWM 工作模式&#xff0c; 利用平均电 流检测模式&#xff0c;因此具有优异的负载…

MySQL 3 环境搭建 MySQL 5.7版本的安装、配置

MySQL5.7.43官网下载地址 MySQL :: Download MySQL Community Server 这里选5.7.43&#xff0c;Windows版本&#xff0c;然后点击Go to Download Page&#xff0c;下载msi安装包的版本 MSI安装包版本比ZIP压缩包版本的安装过程要简单的多&#xff0c;过程更加清楚直观&#x…

十三、【画笔工具组】

文章目录 画笔工具铅笔工具颜色替换工具混合器画笔工具 画笔工具跟混合器画笔工具&#xff0c;是我们平时使用频率较高的两款工具: 画笔工具 可以把画笔工具看成我们用的毛笔,使用时可以在拾色器里边选择我们需要的画笔颜色,可以把拾色器当做我们画画时用的一个颜料盘&#xf…

数字IC/FPGA面试题目合集解析(一)

数字IC/FPGA面试题目合集解析&#xff08;一&#xff09; 题目概述题目1&#xff0c;计算题2&#xff0c;计算题3&#xff0c;选择题 答案与解析1&#xff0c;计算题2&#xff0c;计算题3&#xff0c;选择题 题目概述 1&#xff0c;计算题&#xff1a;计算该触发器等效的建立保…

怎样制作一个展会场馆预约小程序

随着互联网的发展&#xff0c;展会行业也逐渐向数字化转型。展会场馆预约小程序作为展会线下向线上的延伸&#xff0c;能够让参展商和观众随时随地进行预约&#xff0c;大大提升了客户的体验。那么&#xff0c;如何制作一个展会场馆预约小程序呢&#xff1f;下面就以乔拓云平台…

记录--纯CSS实现骚气红丝带

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 在本文中&#xff0c;我们将探讨如何使用 CSS 以最少的代码创造出精美的 CSS 丝带形状,并最终实现下面这个效果&#xff1a; 下面我们使用html和css来实现这个效果。我们使用内容自适应方式布局&#…

Redis分布式锁最牛逼的实现(Java 版,最牛逼的实现方式)

写在前面的话 分布式锁一般有三种实现方式&#xff1a;1. 数据库乐观锁&#xff1b;2. 基于Redis的分布式锁&#xff1b;3. 基于ZooKeeper的分布式锁。 本篇博客将介绍第二种方式&#xff0c;基于Redis实现分布式锁。 为什么需要分布式锁&#xff1f; 在单机环境下编写多线…