设计模式(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、介绍:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说…...
如何创建51单片机KEIL工程
如何创建51单片机KEIL工程步骤: (1)打开keil软件,点击工具栏-Project,选择创建新的工程; (2)然后给工程命名,文章以project为例,然后点击保存 (…...
openGauss学习笔记-34 openGauss 高级数据管理-SCHEMA
文章目录 openGauss学习笔记-34 openGauss 高级数据管理-SCHEMA34.1 语法格式34.2 参数说明34.3 示例 openGauss学习笔记-34 openGauss 高级数据管理-SCHEMA SCHEMA又称作模式。通过管理SCHEMA,允许多个用户使用同一数据库而不相互干扰,可以将数据库对象…...
虚拟世界探索:科技之下的未来可能性
随着科技的飞速发展,人们对于虚拟世界的憧憬和探索也日益加深。虚拟世界,那是一个超越现实的概念,一个充满想象力和创造力的领域。然而,虚拟世界究竟有可能实现吗?这是一个引人深思的问题。 虚拟世界,首先让…...
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号 欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享,与更多的人进行学习交流 本文收录于IT资讯速递专栏,本专栏主要用于发布各种IT资讯,为大家可以省时省力的就能阅读和了解到行业的一些新资讯 资…...
TDesign中后台管理系统-用户登录
目录 1 创建用户表2 开发后端接口3 测试接口4 修改登录页面调用后端接口最终效果总结 中后台系统第一个要实现的功能就是登录了,我们通常的逻辑是让用户在登录页面输入用户名和密码,调用后端接口去验证用户的合法性,然后根据接口返回的结果进…...
RN 使用react-navigation写可以滚动的横向导航条(expo项目)
装包: 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…...
单例模式写法的总结(保证线程安全)
首先,单例模式分为饿汉模式和懒汉模式 单例模式有什么用呢? 可以保证在程序运行过程中,一个类只有一个实例,而且该实例易于供外界访问,从而方便的控制了实例个数,并节约系统资源。 例如:DataSource&#x…...
SQL Server 查询数据并汇总相关技巧 23.08.08
GROUPING 是一个聚合函数,它产生一个附加的列,当用 CUBE 或 ROLLUP 运算符添加行时,附加的列输出值为1,当所添加的行不是由 CUBE 或 ROLLUP 产生时,附加列值为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 以前只有商业版才有此模块,而从Qt5.7 开始此模块在社区版本里也可以免费使用了。Data Visualization 用于数据的三维显示,包括三维柱状图、三维空间散点、三维曲面等。Data Visualiza…...
[保研/考研机试] KY87 鸡兔同笼 北京大学复试上机题 C++实现
描述 一个笼子里面关了鸡和兔子(鸡有2只脚,兔子有4只脚,没有例外)。已经知道了笼子里面脚的总数a,问笼子里面至少有多少只动物,至多有多少只动物。 输入描述: 每组测试数据占1行,…...
Jmeter快捷方式和应用图标设置
很多人在安装Jmeter,安装到本机却没有icon,每次使用的时候,每次打开应用都要找目录,不太方便。 【解决问题】 使用bin路径下的一个.bat文件,创建快捷方式。 【操作步骤】 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 密钥(256 位) $key random_bytes(32);// 选择一个加密模式&#…...
CBCGPRibbon 添加Edit、Combox、Hyperlink控件
编辑框、下拉框、网址按钮等是我们常用的控件,对应的类是 CBCGPRibbonEdit CBCGPRibbonComboBox CBCGPRibbonHyperlink 使用实例如下: //Edit CBCGPRibbonEdit* pEdit new CBCGPRibbonEdit(2001, 200); pEdit->SetReadOnly(TRUE); …...
漫话拥塞控制:BBR 是个单流模型
概要(便于检索主题):单流,多流收敛,probe buffer 挤压带宽,maxbw-filter wnd。 我曾经经常说 BBR 是个单流模型,而不是多流收敛模型,也做过不少评论,最近在复听 IETF 的大会,在 IET…...
HTML详解连载(1)
HTML详解连载(1) HTML定义HTML 超文本标记语言标签语法注意拓展 HTML基本骨架解释VS Code 快速生成骨架:标签的关系父子关系(嵌套关系)兄弟关系(并列关系) 代码格式注释 标题标签标签名:h1-h6(双…...
最新版本2023UI千月影视APP源码 开源完美版前后端完美匹配 后端基于ThinkPHP框架
最新版本的2023UI千月影视APP源码是一款开源的完美版应用程序,具备前后端完美匹配的特点。该应用的后端开发基于ThinkPHP框架,这是一个广泛使用的PHP开发框架,具有稳定性和安全性方面的优势。 2023UI千月影视APP是一款提供电影、电视剧、综艺…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...
k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...
爬虫基础学习day2
# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...
Fabric V2.5 通用溯源系统——增加图片上传与下载功能
fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...
