设计模式——抽象工厂模式02

如果是工厂模式是对同一类商品进行抽象然后生产。
那么抽象工厂模式是对工厂的抽象,每个工厂都能生产多种产品,不同工厂生产的商品性质相同,但外观,品牌会略有差异。
设计模式,一定要敲代码理解
在这里插入图片描述

商品抽象

public interface Bed {void  getInfo();
}
public interface BedsideTable {void  getInfo_b();
}
public interface Chair {void  getInfo_c();
}

工厂抽象

/*** @author ggbond* @date 2024年04月01日 08:48* 一个工厂 能同时生产 床,床头柜,椅子*/
public interface Ifactory {Bed productBed();BedsideTable productBedsideTable();Chair productChair();}

具体抽象商品,看代码这里不展示了。

具体工厂

/*** @author ggbond* @date 2024年04月01日 08:53* 工厂1 负责 生产  实木床, 实木床头柜,餐厅椅*/
public class Factory01 implements Ifactory{static {System.out.println("我是工厂01");}@Overridepublic Bed productBed() {return new WoodBed();}@Overridepublic BedsideTable productBedsideTable() {return new SolidWoodBedsideTable();}@Overridepublic Chair productChair() {return new DiningChair();}
}

测试内容

public class Main {public static void main(String[] args) {Ifactory factory01=new Factory01();Bed bed=factory01.productBed();BedsideTable bedsideTable = factory01.productBedsideTable();Chair chair = factory01.productChair();bed.getInfo();bedsideTable.getInfo_b();chair.getInfo_c();System.out.println("---------");Ifactory factory02=new Factory02();Bed bed02=factory02.productBed();BedsideTable bedsideTable02 = factory02.productBedsideTable();Chair chair02 = factory02.productChair();bed02.getInfo();bedsideTable02.getInfo_b();chair02.getInfo_c();}
}

结果展示

我是工厂01
生产了一个 实木床
生产了一个 实木床头柜
生产了一个 餐椅
---------
我是工厂02
生产了一个 铁艺床
生产了一个 涂漆床头柜
生产了一个 办公椅

总结

不同工厂生产同一商品族,但商品外形,品牌可差异化。
如果仅加 新工厂,对于商品也要对应实现。实现了单一与开闭原则
如果每个工厂新增商品 如上述家具工厂新增电视柜,那么之前每个工厂内部要加 生产电视柜 方法 与电视柜抽象与实现,破坏了开闭,同时当工厂数量过多时,改动工作量亦剧增。

代码下载

代码下载

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

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

相关文章

每日五道java面试题之ZooKeeper篇(一)

目录: 第一题. ZooKeeper 是什么?第二题. Zookeeper 文件系统第三题. Zookeeper 怎么保证主从节点的状态同步?第四题. 四种类型的数据节点 Znode第五题 . Zookeeper Watcher 机制 – 数据变更通知 第一题. ZooKeeper 是什么? Zoo…

MySQL面试题系列-6

MySQL是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的RDBMS (Relational Database Management System,关系数据…

flutter项目ffi相关

Flutter 使用FFICustomPainter实现全平台渲染视频_flutter ffi-CSDN博客

libusb Qt使用记录

1.libusb 下载 ,选择编译好的二进制文件,libusb-1.0.26-binaries.7z libusb Activity 2. 解压 3. 在 Qt Widgets Application 或者 Qt Console Application 工程中导入库,Qt 使用的是 minggw 64编译器,所以选择libusb-MinGW-x64。…

基于STM32的电子钟与万年历设计

1、功能 硬件部分: (1). 采用 STM32F103ZET6作为主控芯片, 负责驱动其他外设模块 (2). 实时时钟采用 STM32 本身的 RTC (3). TFT(LCD)彩色显示屏 正点原子的3.5寸触摸屏(NT3510) (4). DS18B20 温度传感器 支持的功能&#xf…

C语言—用EasyX实现反弹球消砖块游戏

代码效果如下 #undef UNICODE #undef _UNICODE #include<graphics.h> #include<conio.h> #include<time.h> #include<stdio.h>#define width 640 #define high 480 #define brick_num 10int ball_x, ball_y; int ball_vx, ball_vy; int radius; int ba…

使用 Clickhouse 集成的表引擎同步数据方式详解

Clickhouse作为一个列式存储分析型数据库&#xff0c;提供了很多集成其他组件的表引擎数据同步方案。 官网介绍 一 Kafka 表引擎 使用Clickhouse集成的Kafka表引擎消费Kafka写入Clickhouse表中。 1.1 流程图 1.2 建表 根据上面的流程图需要建立三张表&#xff0c;分别Click…

Vue 组合式 API

Vue 组合式 API 生命周期钩子 在 Vue2 中&#xff0c;我们通过以下方式实现生命周期钩子函数&#xff1a; export default {beforeMount() {console.log(V2 beforeMount!)},mounted() {console.log(V2 mounted!)} }; 在 Vue3 组合 API 中实现生命周期钩子函数可以在 setup()…

鸿蒙组件学习_Image组件

说明 该组件从API Version 7 开始支持 使用网络图片时,需要申请ohos.permission.INTERNET 参数 必填 src 图片的数据源,支持本地图片和网络图片 不支持跨包跨模块调用该Image组件,建议使用$r方式来管理需全局使用的图片资源。属性 alt 加载时显示的占位图&#xf…

Linux云计算之网络基础8——IPV6和常用网络服务

目录 一、IPV6基础 IPV6详解 IPv6数据报的基本首部 IPv6数据报的扩展首部 IPv6地址的表示方法 IPv6地址分类 网际控制报文协议ICMPv6 二、cisco基于IPV6的配置 cisco基于IPV6的配置步骤 模拟配置 三、HTML基础介绍 文档的结构 动手操作一下 四、常用网络服务介绍…

【架构一】CS架构和BS架构

最近在做架构的设计工作&#xff0c;做技术选型难免要区分好CS架构和BS架构。下面就来谈谈两者的区别。 首先CS架构分两层C/S和三层C/S架构。最开始人们都是用的两层CS架构&#xff0c;但它的缺点也孕育而生。 两层CS架构的缺点&#xff1f; &#xff08;1&#xff09;服务器…

B2029 大象喝水

题目描述 一只大象口渴了&#xff0c;要喝 20 升水才能解渴&#xff0c;但现在只有一个深 ℎh 厘米&#xff0c;底面半径为 r 厘米的小圆桶 &#xff08;h 和 r 都是整数&#xff09;。问大象至少要喝多少桶水才会解渴。 Update&#xff1a;数据更新&#xff0c;这里我们近似地…

网络编程(TCP、UDP)

文章目录 一、概念1.1 什么是网络编程1.2 网络编程中的基本知识 二、Socket套接字2.1 概念及分类2.2 TCP VS UDP2.3 通信模型2.4 接口方法UDP数据报套接字编程TCP流套接字编程 三、代码示例3.1 注意点3.2 回显服务器基于UDP基于TCP 一、概念 首先介绍了什么是网络编程&#xff…

Emacs之实现复制当前已打开文件buffer(一百三十五)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

ruoyi-nbcio-plus基于vue3的flowable流程元素选择区面板的升级修改

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 http://122.227.135.243:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a…

51单片机实验01-点亮LED小灯

目录 一&#xff0c;软件下载 二&#xff0c;单片机概述 1&#xff0c;单片机内部资源 1&#xff09;flash 2&#xff09;ram 3&#xff09;sfr 2&#xff0c;51单片机 3&#xff0c;单片机最小系统 三&#xff0c;点亮最右边的小灯 1&#xff0c;指出满足小灯点亮的有…

适用于车载设备无钥匙进入系统汽车用晶振FA-238A

汽车用晶振FA-238A是一款适用于车载设备无钥匙进入系统的耐高温晶振。汽车用晶振FA-238A是爱普生推出一的款MHz表贴式晶体单元&#xff0c;具有很好的预率性能&#xff0c;符合AEC-0200标准&#xff0c;其封装尺寸仅为3.2x2.5x0.7mm&#xff0c;工作温度范围在-40℃~125℃之间&…

【计算机考研】408到底有多难?值得冲吗?

考408就必须要面对的现实&#xff01;拒绝眼高手低&#xff01;&#xff01; 408其实想达到110并不难&#xff0c;但是想上130是比较困难的。 几个必须要面对的现实&#xff1a; 1.如果备考的是11408&#xff0c;除非基础特别好或者学习能力特别强&#xff0c;否则一定要尽早…

非关系型数据库-----------探索Redis支持五种数据类型

目录 一、Redis支持五种数据类型 1.String&#xff08;字符串&#xff09; 2.Hash&#xff08;哈希&#xff09; 3.List&#xff08;列表&#xff09; 4.Set&#xff08;集合&#xff09; 5.sorted set(有序集合) 二、Redis的字符串类型string 1、 SET/GET/APPEND/STRL…

代码随想录第十六天: 二叉树part03

力扣222 完全二叉树的节点个数 class Solution {public int countNodes(TreeNode root) {if(root null) return 0;TreeNode leftnode root.left;int leftdepth 0;TreeNode rightnode root.right;int rightdepth 0;while(leftnode ! null) {leftnode leftnode.left;leftd…