工厂方法模式和抽象工厂

工厂方法模式的核心思想就是为每种产品定义一个创建工厂方法的工厂类,核心就是面向接口编程

成员包含:
(1)产品接口,工厂接口
(2)产品实现类,工厂实现类

产品接口和具体产品类
// 产品接口
interface Product {void use();
}// 具体产品A
class ProductA implements Product {@Overridepublic void use() {System.out.println("Using ProductA");}
}// 具体产品B
class ProductB implements Product {@Overridepublic void use() {System.out.println("Using ProductB");}
}
工厂接口和具体工厂类// 工厂接口
abstract class ProductFactory {public abstract Product createProduct();
}// 具体工厂A,负责创建ProductA
class ProductAFactory extends ProductFactory {@Overridepublic Product createProduct() {return new ProductA();}
}// 具体工厂B,负责创建ProductB
class ProductBFactory extends ProductFactory {@Overridepublic Product createProduct() {return new ProductB();}
}
客户端代码public class Client {public static void main(String[] args) {// 使用工厂A创建产品AProductFactory factoryA = new ProductAFactory();Product productA = factoryA.createProduct();productA.use(); // 输出:Using ProductA// 使用工厂B创建产品BProductFactory factoryB = new ProductBFactory();Product productB = factoryB.createProduct();productB.use(); // 输出:Using ProductB}
}

抽象工厂:和工厂方法模式相似,只是多了产品族这个概念

抽象工厂模式是用于创建一系列相关或相互依赖的对象,这个模式强调的是“产品族”的概念

如下,一个工厂实现,可以创建多个相同产品族的产品。

// 抽象产品接口 - Chair
interface Chair {void sitOn();
}// 抽象产品接口 - Table
interface Table {void placeOn();
}// 具体产品 - Victorian Chair
class VictorianChair implements Chair {@Overridepublic void sitOn() {System.out.println("Sitting on a Victorian chair.");}
}// 具体产品 - Modern Chair
class ModernChair implements Chair {@Overridepublic void sitOn() {System.out.println("Sitting on a modern chair.");}
}// 具体产品 - Victorian Table
class VictorianTable implements Table {@Overridepublic void placeOn() {System.out.println("Placing on a Victorian table.");}
}// 具体产品 - Modern Table
class ModernTable implements Table {@Overridepublic void placeOn() {System.out.println("Placing on a modern table.");}
}// 抽象工厂接口
interface FurnitureFactory {Chair createChair();Table createTable();
}// 具体工厂 - Victorian Furniture Factory
class VictorianFurnitureFactory implements FurnitureFactory {@Overridepublic Chair createChair() {return new VictorianChair();}@Overridepublic Table createTable() {return new VictorianTable();}
}// 具体工厂 - Modern Furniture Factory
class ModernFurnitureFactory implements FurnitureFactory {@Overridepublic Chair createChair() {return new ModernChair();}@Overridepublic Table createTable() {return new ModernTable();}
}

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

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

相关文章

xss+csrf项目实例

项目背景: 如下:我们是在一个类似文章管理系统的网站上面发现的该漏洞。我们将其运行在本地的phpstudy集成环境上面。 源码地址下载链接:https://pan.baidu.com/s/1MpnSAq7a_oOcGh4XgPE-2w 提取码:4444 考察内容: …

分布式锁的几种形式以及优缺点

在分布式系统中,分布式锁是一种用于控制对共享资源访问的机制,以确保多进程、多线程环境下的数据一致性。分布式锁有多种实现方式,本文将介绍几种常见的分布式锁及其优缺点。 一、基于数据库的分布式锁 实现方式 表锁:使用数据库提供的锁机制,例如 MySQL 的 SELECT ... …

【JavaScript脚本宇宙】提升Markdown工作流:不可错过的六个JavaScript库

优化你的Markdown体验:六大JavaScript库一网打尽 前言 在现代Web开发中,Markdown作为一种轻量级的标记语言,凭借其简洁易读的语法和广泛的适用性,迅速成为开发者们的宠儿。为了更有效地解析和处理Markdown内容,JavaS…

10 C++11

10 C11 1、类型推导1.1 auto关键字1.2 auto类型推断本质 2、类型计算2.1 类型计算分类2.2 类型计算的四种规则2.3 返回值类型计算 3、列表初始化4、Lambda表达式4.1 前置知识4.2 Lambda表达式4.3 捕获表 5、右值引用5.1 概念5.2 左值引用和右值引用 6、移动语义 1、类型推导 1…

中断里用信号量而不用消息队列

在嵌入式开发中,中断处理程序(ISR)是一个非常重要的部分。ISR需要非常高效地运行,以确保系统能够及时响应硬件事件。使用信号量和消息队列都是常见的同步机制,但它们在中断上下文中的使用有不同的限制和建议。 信号量…

嵌入式复古游戏项目开发与实现

大家好,今天看到一个火柴盒项目,非常的小巧,分享给大家,感兴趣的话,可以复刻一个玩一玩。 MicroByte 是一款微型主机,能够运行 NES、GameBoy、GameBoy Color、Game Gear 和 Sega Master 系统的游戏,所有元器件都设计在这 78 x 17 x 40 mm 的封装中。尽管成品尺寸很小,但…

AI预测体彩排3采取888=3策略+和值012路或胆码测试6月16日升级新模型预测第1弹

根据前面的预测效果,我对模型进行了重新优化,因为前面的模型效果不是很好。熟悉我的彩友比较清楚,我之前的主要精力是对福彩3D进行各种模型的开发和预测,排三的预测也就是最近1个月才开始搞的。3D的预测,经过对模型的多…

Java面向对象-接口

Java面向对象-接口 一、JDK1.8之前二、接口的作用三、JDK1.8之后,新增非抽象方法四、静态方法 一、JDK1.8之前 1、类是类,接口是接口,它们是同一层次的概念 2、接口中没有构造器 3、接口如何声明:interface 4、在jdk1.8之前&…

002 IOC和DI使用

文章目录 基于XML的使用IOC配置第三种:实例工厂(了解)DI配置构造函数注入set方法注入(重点)使用p名称空间注入数据依赖注入不同类型的属性 基于注解和XML混合方式的使用IoC注解使用方法IoC注解(创建对象)DI注解(依赖注入)关于注解和XML的选择问题 基于纯注解方式使用注解和XML混…

【字符串函数】

1.strlen的使⽤和模拟实现 size_t strlen ( const char * str ); 1.字符串以 \0 作为结束标志,strlen函数返回的是在字符串中 \0 前⾯出现的字符个数(不包 含 \0 )。 2.参数指向的字符串必须要以 \0 结束。 3.注意函数的返回值为size_t,是⽆…

代码随想录算法训练营刷题复习3:动态规划——子序列问题

子序列问题 包含四个子问题:子序列(不连续)、子序列(连续)、编辑距离、回文 子序列(不连续) 300.最长递增子序列 定义dp数组,问什么dp的定义就设什么, 更新dp[i]的值&…

力扣148. 排序链表

给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。 示例 1: 输入:head [4,2,1,3] 输出:[1,2,3,4] 示例 2: 输入:head [-1,5,3,4,0] 输出:[-1,0,3,4,5] 示例 3&…

23 华三(自动获取的IP地址)

华三交换机 DHCP 配置 #version 7.1.070, Alpha 7170 //设备的版本信息 #sysname sw1 //修改设备的名字 #irf mac-address persistent timerirf auto-update enableundo irf link-delayirf member 1 priority 1#dhcp enable //开启DHCP 服务dhcp server forbidden-ip 192.168.…

.net 调用海康SDK的常用操作封装

📢欢迎点赞 :👍 收藏 ⭐留言 📝 如有错误敬请指正,赐人玫瑰,手留余香!📢本文作者:由webmote 原创📢作者格言:新的征程,我们面对的不仅…

2024/6/16周报

文章目录 摘要Abstract文献阅读题目问题本文贡献方法aGNN输入和输出模块嵌入模块编码器和解码器模块:支持多头注意的GCN多头自注意力机制GCN模型解释:SHAP 案例研究地下水流动与污染物运移模型研究场景设计 数据集实验结果 代码复现结论 摘要 本周阅读了…

whisper 模型源码解读

whisper官方源码 whisper 模型官方代码:https://github.com/openai/whisper/blob/main/whisper/model.py ;注释如下 import base64 import gzip from dataclasses import dataclass from typing import Dict, Iterable, Optionalimport numpy as np impo…

java设计模式和面向对象编程思想

Java设计模式和面向对象编程思想是软件开发中的核心概念,对于构建可维护、可扩展的软件系统至关重要。下面是对这两个主题的知识点总结: 面向对象编程(OOP)思想 封装:将数据(属性)和操作这些数据…

享元和代理模式

文章目录 享元模式1.引出享元模式1.展示网站项目需求2.传统方案解决3.问题分析 2.享元模式1.基本介绍2.原理类图3.外部状态和内部状态4.类图5.代码实现1.AbsWebSite.java 抽象的网站2.ConcreteWebSite.java 具体的网站,type属性是内部状态3.WebSiteFactory.java 网站…

CSS从入门到精通——动画:CSS3动画执行次数和逆向播放

目录 任务描述 相关知识 动画执行次数 动画反向播放 编程要求 任务描述 本关任务:用 CSS3 实现loading效果。效果图如下: 相关知识 为了完成本关任务,你需要掌握:1.动画执行次数,2.动画反向播放。 需要实现的效…

Go 的 netpoll 如何避免洪泛攻击

Go 的 netpoll(网络轮询器)组件在其网络库中扮演了一个关键角色,它用来高效地处理大量的网络事件,特别是在高并发环境下。 然而,防止洪泛攻击(如 SYN Flood、UDP Flood)并不仅仅是 netpoll 本身…