设计模式(9)——创建型模式之工厂方法

设计模式(9)——创建型模式之工厂方法

    • 工厂方法
      • 作用
      • 结构
      • 伪代码
      • 适用场景

在这里插入图片描述

工厂方法

作用

工厂方法是一种创建型设计模式,其在父类中提供一个创建对象的方法,允许子类决定实例化对象的类型。

结构

在这里插入图片描述

  1. 产品(Product)将会对接口进行声明。对于所有由创建者及其子类构建的对象,这些接口都是通用的。
  2. 具体产品(Concrete Products)是产品接口的不同实现。
  3. 创建者(Creator)类声明返回产品对象的工厂方法。该方法的返回对象类型必须与产品接口相匹配。
  4. 具体创建者(Concrete Creators) 将会重写基础工厂方法,使其返回不同类型的产品。
    可以在创建者(Creator)中声明抽象方法,由具体创建者(Concrete Creators)以不同的实现返回产品(Product)对象;也可以在创建者(Creator)中返回默认的产品(Product)对象。

伪代码

以下示例演示了如何使用工厂方法开发跨平台UI(用户界面)组件,并同时避免客户代码与具体 UI 类之间的耦合。基础对话框类使用不同的UI 组件渲染窗口。在不同的操作
系统下, 这些组件外观或许略有不同, 但其功能保持一致。Windows 系统中的按钮在 Linux 系统中仍然是按钮。
在这里插入图片描述
如果使用工厂方法,就不需要为每种操作系统重写对话框逻辑。如果我们声明了一个在基本对话框类中生成按钮的工厂方法,那么我们就可以创建一个对话框子类,并使其通过工
厂方法返回Windows 样式按钮。子类将继承对话框基础类的大部分代码,同时在屏幕上根据 Windows 样式渲染按钮。

// Button作为产品接口,将声明所有具体产品都必须实现的操作。

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

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

相关文章

Docker 疑难杂症解决指南:从入门到进阶的全面剖析

Docker 作为容器化技术的代表,凭借其轻量级、可移植性和高效资源利用率,已成为开发、测试和部署应用的标准工具。然而,在实际使用中,用户常常会遇到镜像构建失败、容器启动异常、网络配置问题等疑难杂症。本文将从镜像构建、容器生…

抢跑「中央计算+区域控制」市场,芯驰科技高端智控MCU“芯”升级

伴随着整车EE架构的加速变革,中国高端车规MCU正在迎来“新格局”。 在4月23日开幕的上海国际车展期间,芯驰科技面向新一代AI座舱推出了X10系列芯片,以及面向区域控制器、电驱和动力域控、高阶辅助驾驶和舱驾融合系统等的高端智控MCU产品E3系…

DeepPrep:深度学习提升神经影像预处理

DeepPrep:深度学习提升神经影像预处理 一、DeepPrep介绍和BIDS格式介绍 神经影像预处理的痛点:传统工具(如fMRIPrep)在大规模数据处理时效率低下,临床样本鲁棒性不足。DeepPrep通过深度学习工作流管理实现突破&#…

pytorch 数据预处理和常用工具

文章目录 NumPyNumpy数据结构安装和使用NumPy Matplotlib的安装和导入安装和导入Matplotlib绘制基础图画折线图散点图柱状图图例 数据清洗据清洗的作用Pandas进行数据清洗Pandas数据结构Series 数据结构DataFrame数据结构 Pandas数据清洗常用代码 特征工程主成分分析线性判别分…

MATLAB 中常用的微分函数介绍

MATLAB 中常用的微分函数介绍 在 MATLAB 中,微分运算是数值计算和符号计算中常用的功能。无论是在进行数据分析、优化算法,还是数学建模时,微分都扮演着重要的角色。本文将介绍 MATLAB 中常用的微分函数,并通过简单的示例帮助大家…

按指定位置或关键字批量删除工作表-Excel易用宝

在一个工作簿中有多个工作表,有些工作表不需要了,如果一个一个手动删除,那实在是太慢了,有没有什么好的方法可以批量删除工作表。 批量删除工作表很简单,单击【易用宝】→【工作表】→【批量删除工作表】。 在打开的批…

TypeScript装饰器:从入门到精通

TypeScript装饰器:从入门到精通 什么是装饰器? 装饰器(Decorator)是TypeScript中一个非常酷的特性,它允许我们在不修改原有代码的情况下,给类、方法、属性等添加额外的功能。想象一下装饰器就像给你的代码…

【SSL证书系列】客户端如何检查中间CA签名是否由根CA签发

客户端通过以下步骤检查中间CA的签名是否由受信任的根CA签发: 1. 证书链的构建 服务器发送的证书链通常包含: • 服务器证书(由中间CA签发) • 中间CA证书(由根CA签发) • 根CA证书(通常不发送…

【android bluetooth 协议分析 12】【A2DP详解 1】【车机侧蓝牙音乐免切源介绍】

“车机蓝牙音乐免切源” 是近年来车载系统(IVI,In-Vehicle Infotainment)中常见的一个用户体验优化功能。它主要是为了简化蓝牙音乐播放流程、减少用户操作,提升使用便捷性。 一、什么是“切源”? 在车机系统中&#…

Android usb网络共享详解

Android usb网络共享详解 文章目录 Android usb网络共享详解一、前言二、USB网络共享使用的前提1、Android设备支持adb 并且打开usb开关2、原生Settings能看到USB网络共享开关3、代码中检测USB网络共享是否支持 三、Settings 中USB网络共享代码的部分代码1、Settings\res\xml\t…

Step1

项目 SchedulerSim 已搭建完成 ✅ ⸻ ✅ 你现在拥有的: • 🔧 两种调度器(Round Robin SJF) • 📦 模拟进程类 Process • 🧱 清晰结构:OOP 风格 便于扩展 • ✍️ 主函数已演示调度器运行效…

初探 Skynet:轻量级分布式游戏服务器框架实战

在游戏服务器开发领域,高效、稳定且易于扩展的框架一直是开发者追求的目标。Skynet 作为一款轻量级、高性能的分布式游戏服务器框架,凭借其独特的设计理念和强大的功能,赢得了众多开发者的青睐 一.Skynet底层架构支持 1.Actor erlang 从语言…

Oracle数据库中,WITH..AS 子句用法解析

前言 在Oracle数据库中,WITH子句(也成为“子查询因子化” 或“公共表表达式”,Common Table Expression, CTE)用于定义一个临时命名的结果集,这个结果集可以在后续的查询中引用。 一、基本语法 WITH sjtab AS (SELE…

什么是卫星电话?卫星电话与普通电话有什么区别?

在信息时代,通信技术已渗透到人类生活的方方面面,但传统地面通信网络仍存在盲区,无论是海洋、沙漠、高山,还是灾害现场,普通手机往往因基站信号无法覆盖而失效。此时,卫星电话便成为连接世界的“生命线”。…

【C/C++】高阶用法_笔记

1. 模板元编程&#xff08;TMP&#xff09;与编译时计算 (1) 类型萃取与 SFINAE 类型萃取&#xff08;Type Traits&#xff09;&#xff1a;利用模板特化在编译时推断类型属性。 template<typename T> struct is_pointer { static constexpr bool value false; };templ…

鸿蒙OSUniApp 实现一个精致的日历组件#三方框架 #Uniapp

使用 UniApp 实现一个精致的日历组件 前言 最近在开发一个约会小程序时&#xff0c;需要实现一个既美观又实用的日历组件。市面上虽然有不少现成的组件库&#xff0c;但都不太符合我们的设计需求。于是&#xff0c;我决定从零开始&#xff0c;基于 UniApp 自己实现一个功能完…

PyQt5完整指南:从入门到实践

引言 PyQt5是Python编程语言的一个GUI&#xff08;图形用户界面&#xff09;工具包&#xff0c;它是Qt5应用程序框架的Python绑定。Qt是一个跨平台的C应用程序开发框架&#xff0c;被广泛用于开发GUI程序和非GUI程序。PyQt5让Python开发者能够使用Python语言享受到Qt框架的强大…

Excel的详细使用指南

### **一、Excel基础操作** #### **1. 界面与基本概念** - **工作簿&#xff08;Workbook&#xff09;**&#xff1a;一个Excel文件&#xff08;扩展名.xlsx&#xff09;。 - **工作表&#xff08;Worksheet&#xff09;**&#xff1a;工作簿中的单个表格&#xff08;默认名…

Linux grep -r 查找依赖包是否存在依赖类 Class

方法一&#xff1a;通过 Linux &#xff0c;grep -r ClassPath 命令 grep -f org.apache.kafka.connect.source.SourceRecord在 jar 包所在 lib 或者 lib/plugins 目录下执行&#xff0c;grep -r&#xff0c; flink-sql-connector-sqlserver-cdc-3.3.0.jar 中此 kafka Source…

碎片笔记|AI生成图像溯源方法源码复现经验(持续更新中……)

前言&#xff1a;本篇博客分享一些溯源方法的复现经验&#xff0c;希望能帮助到大家&#x1f389;。 目录 1. Close-set AttributionRepmixDe-FakeDNA-Net 2. Open-set AttributionPOSE 3. Single-Model AttributionOCC-CLIPLatentTracer 1. Close-set Attribution Repmix 论…