当前位置: 首页 > news >正文

设计模式(2)工厂方法模式

一、

1、介绍:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖。工厂方法模式也即将简单工厂模块的Factory工厂类拆成接口,再定义具体的工厂子类去实现。

2、结构图

 3、代码

/*** 虚拟工厂类* 给具体的工厂类提供虚拟方法*/
abstract class AbstractFactory {// 表示创建产品的方法,此处使用的是通过具体的产品类的Class来确定需要创建的产品// 也可以通过String等其他方式来指定public abstract <T extends AbstractProduct> T create(Class<T> tClass);}
/*** 具体工厂类* 继承虚拟工厂类,提供真正的创建对象的方法的实现*/
class CommonFactory extends AbstractFactory{@Override // 对虚拟工厂类的方法进行重写public <T extends AbstractProduct> T create(Class<T> tClass) {T product = null; // 创建一个null对象作为初始化,使catch到异常后也能有null返回作为结果try {// 明明这样就可以实现,但是书里写的更加复杂// (T)Class.forName(tClass.getName()).newInstance()// 暂时对此感到不解product = tClass.newInstance(); // 通过反射创建新的对象} catch (Exception e) {e.printStackTrace();}return product;}
}
/*** 虚拟产品类* 对产品类的属性以及方法做好规范* 如果有所有具体产品类都通用的方法也可以直接实现*/
abstract class AbstractProduct {/*** 通用方法*/public void method1() {System.out.println("所有产品都会这么做");}/*** 每个产品实现各异的方法*/public abstract void method2();
}
/*** 具体产品类* 继承虚拟产品类,在虚拟产品类提供的默认方法外,具体实现虚拟类中规定的虚拟方法*/
class Product extends AbstractProduct {@Overridepublic void method2() {System.out.println("这是一个具体的产品类的特性");}
}
class Client {public static void main(String[] args) {AbstractFactory factory = new CommonFactory();AbstractProduct product = factory.create(Product.class);product.method1();product.method2();}
} 

相关文章:

设计模式(2)工厂方法模式

一、 1、介绍&#xff1a;定义一个用于创建对象的接口&#xff0c;让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断&#xff0c;根据客户端的选择条件动态实例化相关的类&#xff0c;对于客户端来说…...

如何创建51单片机KEIL工程

如何创建51单片机KEIL工程步骤&#xff1a; &#xff08;1&#xff09;打开keil软件&#xff0c;点击工具栏-Project&#xff0c;选择创建新的工程&#xff1b; &#xff08;2&#xff09;然后给工程命名&#xff0c;文章以project为例&#xff0c;然后点击保存 &#xff08…...

openGauss学习笔记-34 openGauss 高级数据管理-SCHEMA

文章目录 openGauss学习笔记-34 openGauss 高级数据管理-SCHEMA34.1 语法格式34.2 参数说明34.3 示例 openGauss学习笔记-34 openGauss 高级数据管理-SCHEMA SCHEMA又称作模式。通过管理SCHEMA&#xff0c;允许多个用户使用同一数据库而不相互干扰&#xff0c;可以将数据库对象…...

虚拟世界探索:科技之下的未来可能性

随着科技的飞速发展&#xff0c;人们对于虚拟世界的憧憬和探索也日益加深。虚拟世界&#xff0c;那是一个超越现实的概念&#xff0c;一个充满想象力和创造力的领域。然而&#xff0c;虚拟世界究竟有可能实现吗&#xff1f;这是一个引人深思的问题。 虚拟世界&#xff0c;首先让…...

OSPF技术入门(第三十四课)

1 OSPF的介绍 OSPF是一种链路状态路由协议,主要用于IP网络中的路由选择。它是一种开放协议,能够在不同的网络设备之间进行通信。OSPF利用链路状态数据库来描述网络拓扑结构,并通过Dijkstra算法计算出最短路径。它支持按照精确度划分的路由优先级,以及多个相等的路径,并能自…...

春秋云镜 CVE-2022-0948

春秋云镜 CVE-2022-0948 WordPress plugin Order Listener for WooCommerce SQLI 靶标介绍 WordPress 插件 Order Listener for WooCommerce 3.2.2 之前版本存在 SQL注入漏洞。 启动场景 漏洞利用 EXP curl http://example.com/?rest_route/olistener/new --data {"…...

【资讯速递】AI与人类思维的融合;OpenAI在中国申请注册“GPT-5”商标;移动大模型主要面向to B 智能算力是未来方向

2023年8月11日 星期五 癸卯年六月廿五 第000001号 欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享&#xff0c;与更多的人进行学习交流 本文收录于IT资讯速递专栏,本专栏主要用于发布各种IT资讯&#xff0c;为大家可以省时省力的就能阅读和了解到行业的一些新资讯 资…...

TDesign中后台管理系统-用户登录

目录 1 创建用户表2 开发后端接口3 测试接口4 修改登录页面调用后端接口最终效果总结 中后台系统第一个要实现的功能就是登录了&#xff0c;我们通常的逻辑是让用户在登录页面输入用户名和密码&#xff0c;调用后端接口去验证用户的合法性&#xff0c;然后根据接口返回的结果进…...

RN 使用react-navigation写可以滚动的横向导航条(expo项目)

装包&#xff1a; yarn add react-navigation/material-top-tabs react-native-tab-view npx expo install react-native-pager-view import React from react import { View, Text, ScrollView, SafeAreaView } from react-native import { Icon } from ../../../../../compo…...

单例模式写法的总结(保证线程安全)

首先&#xff0c;单例模式分为饿汉模式和懒汉模式 单例模式有什么用呢? 可以保证在程序运行过程中&#xff0c;一个类只有一个实例&#xff0c;而且该实例易于供外界访问&#xff0c;从而方便的控制了实例个数&#xff0c;并节约系统资源。 例如&#xff1a;DataSource&#x…...

SQL Server 查询数据并汇总相关技巧 23.08.08

GROUPING 是一个聚合函数,它产生一个附加的列&#xff0c;当用 CUBE 或 ROLLUP 运算符添加行时&#xff0c;附加的列输出值为1&#xff0c;当所添加的行不是由 CUBE 或 ROLLUP 产生时&#xff0c;附加列值为0。 仅在与包含 CUBE 或 ROLLUP 运算符的 GROUP BY 子句相联系的选择…...

第一章 SpringBoot 介绍-最小配置

1. spring-boot web应用的最小配置 1.1 pom配置两个依赖 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.4.RELEASE</version></parent><depende…...

10-1_Qt 5.9 C++开发指南_Data Visualization实现数据三维显示

Data Visualization 是 Qt 提供的用于数据三维显示的模块。在 Qt 5.7 以前只有商业版才有此模块&#xff0c;而从Qt5.7 开始此模块在社区版本里也可以免费使用了。Data Visualization 用于数据的三维显示&#xff0c;包括三维柱状图、三维空间散点、三维曲面等。Data Visualiza…...

[保研/考研机试] KY87 鸡兔同笼 北京大学复试上机题 C++实现

描述 一个笼子里面关了鸡和兔子&#xff08;鸡有2只脚&#xff0c;兔子有4只脚&#xff0c;没有例外&#xff09;。已经知道了笼子里面脚的总数a&#xff0c;问笼子里面至少有多少只动物&#xff0c;至多有多少只动物。 输入描述&#xff1a; 每组测试数据占1行&#xff0c;…...

Jmeter快捷方式和应用图标设置

很多人在安装Jmeter,安装到本机却没有icon&#xff0c;每次使用的时候&#xff0c;每次打开应用都要找目录&#xff0c;不太方便。 【解决问题】 使用bin路径下的一个.bat文件&#xff0c;创建快捷方式。 【操作步骤】 Step1、将Jmeter 安装bin路径下的jmeter.bat 发送快捷方…...

PHP sm4国密加密解密文件

<?php // 打开要加密的 PDF 文件 $sourceFilePath path/to/source.pdf; $encryptedFilePath path/to/encrypted.pdf; $decryptedFilePath path/to/decrypted.pdf;// 生成一个 AES 密钥&#xff08;256 位&#xff09; $key random_bytes(32);// 选择一个加密模式&#…...

CBCGPRibbon 添加Edit、Combox、Hyperlink控件

编辑框、下拉框、网址按钮等是我们常用的控件&#xff0c;对应的类是 CBCGPRibbonEdit CBCGPRibbonComboBox CBCGPRibbonHyperlink 使用实例如下&#xff1a; //Edit CBCGPRibbonEdit* pEdit new CBCGPRibbonEdit(2001, 200); pEdit->SetReadOnly(TRUE); …...

漫话拥塞控制:BBR 是个单流模型

概要(便于检索主题)&#xff1a;单流&#xff0c;多流收敛&#xff0c;probe buffer 挤压带宽&#xff0c;maxbw-filter wnd。 我曾经经常说 BBR 是个单流模型&#xff0c;而不是多流收敛模型&#xff0c;也做过不少评论&#xff0c;最近在复听 IETF 的大会&#xff0c;在 IET…...

HTML详解连载(1)

HTML详解连载&#xff08;1&#xff09; HTML定义HTML 超文本标记语言标签语法注意拓展 HTML基本骨架解释VS Code 快速生成骨架&#xff1a;标签的关系父子关系&#xff08;嵌套关系&#xff09;兄弟关系&#xff08;并列关系&#xff09; 代码格式注释 标题标签标签名:h1-h6(双…...

最新版本2023UI千月影视APP源码 开源完美版前后端完美匹配 后端基于ThinkPHP框架

最新版本的2023UI千月影视APP源码是一款开源的完美版应用程序&#xff0c;具备前后端完美匹配的特点。该应用的后端开发基于ThinkPHP框架&#xff0c;这是一个广泛使用的PHP开发框架&#xff0c;具有稳定性和安全性方面的优势。 2023UI千月影视APP是一款提供电影、电视剧、综艺…...

QColor实战:从基础到高级的色彩应用

1. QColor基础入门&#xff1a;从零开始玩转色彩 第一次接触Qt开发时&#xff0c;我被QColor的灵活性惊艳到了。这个看似简单的颜色处理类&#xff0c;实际上藏着不少玄机。记得当时为了给按钮设置一个漂亮的渐变色&#xff0c;折腾了好几个小时&#xff0c;现在回头看&#xf…...

别再只盯着SQL注入了!从“任意账号注册”漏洞,聊聊开发中容易被忽视的业务逻辑安全

从“任意账号注册”漏洞看业务逻辑安全的深层防御 在Web应用开发中&#xff0c;开发者往往对SQL注入、XSS等传统安全漏洞保持高度警惕&#xff0c;却容易忽视业务逻辑层面的安全隐患。最近曝光的"任意账号注册"漏洞再次提醒我们&#xff1a;安全防线最薄弱的环节往往…...

抖音无水印下载器终极指南:从零开始快速掌握批量下载技巧

抖音无水印下载器终极指南&#xff1a;从零开始快速掌握批量下载技巧 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback su…...

【技术解析】轻量级超分新范式:CNN与Transformer混合架构的设计与实践

1. 为什么需要轻量级超分技术&#xff1f; 想象一下你用手机拍了一张照片&#xff0c;放大后发现细节模糊不清——这就是低分辨率图像放大的典型问题。传统超分辨率算法要么效果差强人意&#xff0c;要么需要消耗大量计算资源。在实际应用中&#xff0c;我们常常面临这样的矛盾…...

TLPI 第12章 读书笔记:System and Process Information

笔记和练习博客总目录见&#xff1a;开始读TLPI。 在本章中&#xff0c;我们研究访问各种系统和进程信息的方法。本章的主要重点是讨论 /proc 文件系统。我们还描述了 uname() 系统调用&#xff0c;该调用用于检索各种系统标识符。 12.1 The /proc File System 在早期的 UNI…...

PyQt5开发避坑指南:QComboBox动态修改数据时,这些细节千万别忽略

PyQt5开发避坑指南&#xff1a;QComboBox动态数据处理的7个关键细节 在桌面应用开发中&#xff0c;QComboBox作为最常用的下拉选择控件之一&#xff0c;看似简单却暗藏玄机。许多开发者在使用过程中都曾遇到过这样的场景&#xff1a;明明代码逻辑清晰&#xff0c;却在动态修改数…...

突破性技术解析:Anime4K如何实现浏览器端实时动漫超分

突破性技术解析&#xff1a;Anime4K如何实现浏览器端实时动漫超分 【免费下载链接】Anime4K A High-Quality Real Time Upscaler for Anime Video 项目地址: https://gitcode.com/gh_mirrors/an/Anime4K Anime4K是一套开源的高质量实时动漫视频超分辨率与降噪算法&#…...

如何在Android设备上轻松安装SMAPI框架:星露谷物语MOD新手必读指南

如何在Android设备上轻松安装SMAPI框架&#xff1a;星露谷物语MOD新手必读指南 【免费下载链接】SMAPI-Android-Installer SMAPI Installer for Android 项目地址: https://gitcode.com/gh_mirrors/smapi/SMAPI-Android-Installer 还在为手机版星露谷物语的MOD安装感到困…...

KUKA iiwa 机器人FRI JAVA编程实战 -- 从官方Demo到自定义控制模式

1. 从官方Demo到自定义控制模式&#xff1a;FRI JAVA编程入门 第一次接触KUKA iiwa的FRI&#xff08;Fast Robot Interface&#xff09;JAVA编程时&#xff0c;我完全被官方Demo里那些复杂的类名和方法搞懵了。但经过几个项目的实战&#xff0c;我发现只要掌握几个关键点&#…...

HarmonyOS在金融嵌入式设备中的应用开发实践:从入门到精通

引言 随着金融科技的快速发展,嵌入式设备在银行和金融领域的应用日益广泛,如POS机、ATM和智能终端。这些设备需要高性能、高安全性的操作系统支持。HarmonyOS(鸿蒙操作系统)作为华为推出的分布式操作系统,以其轻量化、高兼容性和强安全特性,成为金融嵌入式开发的理想选择…...