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

设计模式之【工厂模式、适配器模式】

工厂模式(Factory Pattern)

定义:
工厂模式是一种创建型设计模式,它提供了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法使一个类的实例化延迟到其子类。

主要类型:

  1. 简单工厂模式(Simple Factory Pattern): 又叫静态工厂方法,由一个工厂类根据传入的参数,决定创建哪一种产品类的实例。
  2. 工厂方法模式(Factory Method Pattern): 定义一个创建对象的接口,但让子类决定实例化哪个类。
  3. 抽象工厂模式(Abstract Factory Pattern): 提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。

优点:

  • 代码复用性高。
  • 隐藏了对象的创建细节。
  • 降低了代码的耦合性。

适用场景:

  • 需要创建的对象具有复杂的创建过程。
  • 客户端不需要知道实际创建的具体类。
  • 系统结构需要灵活地添加新产品。

示例代码:

// 简单工厂模式示例
public class SimpleFactory {public static Product createProduct(String type) {if (type.equals("A")) {return new ProductA();} else if (type.equals("B")) {return new ProductB();}return null;}
}public interface Product {void use();
}public class ProductA implements Product {@Overridepublic void use() {System.out.println("Using Product A");}
}public class ProductB implements Product {@Overridepublic void use() {System.out.println("Using Product B");}
}

适配器模式(Adapter Pattern)

定义:
适配器模式是一种结构型设计模式,它将一个类的接口转换成客户希望的另一个接口,使得原本由于接口不兼容而不能一起工作的类可以一起工作。

优点:

  • 让两个不兼容的类能够合作。
  • 提高了类的复用性。
  • 灵活性高。

适用场景:

  • 系统需要使用现有的类,而这些类的接口不符合系统的需求。
  • 需要创建一个可以复用的类,能够与其他不相关或不可预见的类(即这些类可能具有不兼容的接口)协同工作。

示例代码:

// 目标接口
public interface Target {void request();
}// 需要适配的类
public class Adaptee {public void specificRequest() {System.out.println("Specific request");}
}// 适配器类
public class Adapter implements Target {private Adaptee adaptee;public Adapter(Adaptee adaptee) {this.adaptee = adaptee;}@Overridepublic void request() {adaptee.specificRequest();}
}// 客户端代码
public class Client {public static void main(String[] args) {Adaptee adaptee = new Adaptee();Target target = new Adapter(adaptee);target.request();}
}

何时使用工厂模式和适配器模式

工厂模式:

  • 当对象的创建逻辑复杂且需要集中管理时。
  • 当系统需要在不修改客户端代码的情况下引入新产品时。
  • 当客户端不关心具体产品类的创建过程时。

适配器模式:

  • 当现有类的接口与客户端要求的接口不兼容时。
  • 当需要使用现有的类,但它的接口不符合需求时。
  • 当希望创建一个可以与其他不相关类或未来不可预见的类一起工作的可复用类时。

通过这些解释和代码示例,希望能帮助你更好地理解工厂模式和适配器模式及其使用场景。

相关文章:

设计模式之【工厂模式、适配器模式】

工厂模式(Factory Pattern) 定义: 工厂模式是一种创建型设计模式,它提供了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法使一个类的实例化延迟到其子类。 主要类型: 简单工厂模式&…...

云计算:重塑数字时代的基石

目录 一、引言 二、云计算的定义与特点 三、云计算的发展历程 四、云计算的应用场景 五、云计算面临的挑战 六、云计算的未来发展趋势 七、结语 一、引言 随着信息技术的飞速发展,云计算已经逐渐渗透到我们生活的方方面面。从个人用户的在线存储、在线办公&…...

C# SocketUDP服务器,组播

SocketUDP 自己即是服务器又是客户端 ,在发消息只需要改成对方ip和端口号即可 前提对方必须开启服务器 socket.Bind(new IPEndPoint(IPAddress.Parse("192.168.107.72"), 8080)); 控件:Button,TextBox,RichTextBox 打开自己服务器 public…...

上市公司绿色投资者原始数据+计算代码(2008-2022年)

数据简介:“绿色”信号,意味着潜在环境风险更低,从而绿色投资者降低了对绿色债券的风险补偿要求,推动了信用利差的收窄。因此,绿色投资者会通过投资者风险意识影响债券信用风险。绿色投资者在推动企业绿色可持续发展方…...

Redis-主从复制-测试主从模式下的读写操作

文章目录 1、在主机6379写入数据2、在从机6380上写数据报错3、从机只能读数据,不能写数据 1、在主机6379写入数据 127.0.0.1:6379> keys * (empty array) 127.0.0.1:6379> set uname jim OK 127.0.0.1:6379> get uname "jim" 127.0.0.1:6379>…...

Linux系统应用与设置(3):串口调试(minicom)

目录 1. 简述 2. 安装minicom 3. 配置串口参数 4. 打开相应的通信端口 5. 设置 6. 发送字符数据 7. 发送HEX(十六进制) 1. 简述 在Linux系统中,minicom是一个功能强大的串口通信工具,可用于与外部设备进行字符和HEX数据的收…...

Qt | windows Qt6.5.3安卓环境搭建成功版(保姆级教程)

01、第一章 Qt6.5.3安装 资源 Qt 国内下载地址清华大学开源软件镜像站https://mirrors.tuna.tsinghua.edu.cn/qt/archive/online_installers/Qt 阿里云盘下载Qt 安卓开发https://www.alipan.com/s/kNaues6CHaG点击链接保存,或者复制本段内容,打开「阿里云盘」APP ,无需下载极…...

Chrome Extension如何让work flow在页面刷新、跳转继续执行任务

从Electron到Chrome Extension:流程自动化的跨平台探索 在之前的项目中,我使用Electron成功实现了一个流程自动化应用,它极大地提高了工作效率。然而,当面对Chrome扩展程序(Extension)的需求时,我意识到需要一种新的策略来应对浏览器环境下的限制。特别是Chrome Extens…...

数据库调优厂商 OtterTune 宣布停止运营

昨天刷到消息,得知数据库优化厂商 OtterTune 停止了运营。OtterTune 的成员主要来自 CMU Andy Pavlo 教授领导的数据库实验室。公司正式成立于 2021 年 5 月,融资了 1450 万美金。 按照 Andy 教授的说法,公司是被一个收购 offer 搞砸了。同时…...

4、面向对象-typescript

从面向过程转向面向对象,是一个由简易到复杂的过程,主要更多的考虑到对象的属性,方法,行为等。 一、类,对象 类:更偏向于模板,属于抽象类型,指向大类或泛指。 对象&#xff…...

大数据学习之分布式数据采集系统Flume学习

分布式数据采集系统Flume学习 一、Flume架构 1.1 Hadoop业务开发流程 1.2 Flume概述 flume是一个分布式、可靠、和高可用的海量日志采集、聚合和传输的系统。 支持在日志系统中定制各类数据发送方,用于收集数据; 同时,Flume提供对数据进行简单处理&…...

谁用谁夸,为什么BI零售数据分析方案这么受欢迎?

在当今数字化时代,零售行业竞争激烈,如何快速准确地获取数据洞察,成为企业制胜的关键。奥威BI零售数据分析方案,凭借其全面、高效、智能的特点,赢得了广大零售企业的青睐,成为市场上的热门选择。 奥威BI零…...

多路h265监控录放开发-(14)通过PaintCell自定义日历控件继承QCalendarWidget的XCalendar类

首先创建一个新类XCalendar继承QCalendarWidget类&#xff0c;然后在UI视图设计器中把日历提升为XCalendar&#xff0c;通过这个函数自己设置日历的样式 xcalendar.h #pragma once #include <QCalendarWidget> class XCalendar :public QCalendarWidget { public:XCal…...

安卓速度下载v1.0.5/聚合短视频解析下载

功能特色 短视频下载与高级管理 – 支持短视频下载&#xff0c;为您提供一系列高级视频管理功能包括视频内容提取、智能防重复技术、视频体积压缩以及视频转换成GIF图片等&#xff1b; 磁-力链接下载升级 – 现支持磁力链接下载&#xff0c;实现边下载边播放的便捷体验&#x…...

从赛题切入谈如何学习数学建模

1.引言 &#xff08;1&#xff09;今天学习了这个汪教授的这个视频&#xff0c;主要是对于一个赛题的介绍讲解&#xff0c;带领我们通过这个赛题知道数学建模应该学习哪些技能&#xff0c;以及这个相关的经验&#xff0c;我感觉这个还是让我自己受益匪浅的 &#xff08;2&…...

江山欧派杯2024全国华佗五禽戏线上线下观摩交流比赛在亳州开幕

6月28日&#xff0c;2024全国华佗五禽戏线上线下观摩交流比赛在安徽省亳州市开幕。 此次比赛是由安徽省亳州市文化旅游体育局和安徽省非物质文化遗产保护中心主办、亳州市华佗五禽戏协会&#xff08;国家级非遗华佗五禽戏保护单位&#xff09;和亳州市传统华佗五禽戏俱乐部&…...

怪兽充电一季度由盈转亏:营收大幅下滑,消费者投诉不断

《港湾商业观察》施子夫 日常生活中&#xff0c;关于移动充电宝“乱扣费”、“充电功率低”的吐槽之声不绝于耳。而原先风靡一时的共享充电宝也被不少网友吐槽为“充电刺客”&#xff0c;足以可见共享充电宝虽作为大众使用频率较高的移动电源产品&#xff0c;但负面评价声音同…...

激光与相机融合标定汇总:提升融合算法的精度与可靠性(附github地址)

前言 随着科技的飞速发展&#xff0c;激光技术与相机技术的融合已成为推动智能化影像发展的重要力量。这种融合不仅提高了成像的精度和效率&#xff0c;还为相关行业带来了革命性的变革。在这篇博客中&#xff0c;我们将深入探讨激光与相机融合标定的原理及其在各个领域的应用…...

市场拓展招聘:完整指南

扩大招聘业务会给你带来很多挑战&#xff0c;更不用说你已经在处理的问题了。助教专业人士每周花近13个小时为一个角色寻找候选人。此外&#xff0c;客户的需求也在不断变化&#xff0c;招聘机构之间的竞争也在加剧。毫无疑问&#xff0c;对增长有战略的方法会有很大的帮助。一…...

Leetcode 501:二叉搜索树中的众数

给你一个含重复值的二叉搜索树&#xff08;BST&#xff09;的根节点 root &#xff0c;找出并返回 BST 中的所有 众数&#xff08;即&#xff0c;出现频率最高的元素&#xff09;。 如果树中有不止一个众数&#xff0c;可以按 任意顺序 返回。 假定 BST 满足如下定义&#xf…...

M9A智能助手:为《重返未来:1999》玩家解放时间的自动化解决方案

M9A智能助手&#xff1a;为《重返未来&#xff1a;1999》玩家解放时间的自动化解决方案 【免费下载链接】M9A 1999 小助手 项目地址: https://gitcode.com/gh_mirrors/m9/M9A 在当今快节奏的游戏环境中&#xff0c;玩家常常需要在重复性日常任务上投入大量时间&#xff…...

基于关键链方法的遗传算法求解项目调度问题

一、问题背景与核心思想 项目调度问题&#xff08;Project Scheduling Problem, PSP&#xff09;是在满足活动逻辑关系&#xff08;紧前约束&#xff09;和资源约束&#xff08;如人力、设备&#xff09;的前提下&#xff0c;确定各活动开始/结束时间&#xff0c;以最小化项目工…...

DeepSeek-OCR实战教程:批量处理脚本编写与异步解析任务队列设计

DeepSeek-OCR实战教程&#xff1a;批量处理脚本编写与异步解析任务队列设计 1. 学习目标与场景引入 如果你正在处理大量的文档图片&#xff0c;比如扫描的合同、发票、报告或者历史档案&#xff0c;一张张上传到DeepSeek-OCR界面手动处理&#xff0c;不仅效率低下&#xff0c…...

第4章 编码规范-4.2 注释规范

注释规范包括文件注释、文档注释、代码注释和TODO注释。这里需要强调一点&#xff0c;即在程序代码中&#xff0c;对容易引起误解的代码进行注释是必要的&#xff0c;但应避免对已经清晰表达信息的代码进行再次注释&#xff0c;因为频繁的注释有时恰恰反映了代码的低质量&#…...

vLLM-v0.17.1参数详解:--enforce-eager --disable-custom-all-reduce说明

vLLM-v0.17.1参数详解&#xff1a;--enforce-eager --disable-custom-all-reduce说明 1. vLLM框架简介 vLLM是一个专为大型语言模型(LLM)设计的高性能推理和服务库&#xff0c;以其出色的吞吐量和易用性著称。这个项目最初由加州大学伯克利分校的天空计算实验室开发&#xff…...

2026大模型应用爆发:504个案例揭示行业变革新机遇!

2025年&#xff0c;大模型技术如同一颗璀璨的新星&#xff0c;在各行各业绽放出耀眼光芒。从互联网、金融到能源制造、交通运输&#xff0c;再到医疗、教育、公共服务&#xff0c;展现出前所未有的活力和潜力。 大模型的应用不仅改变了企业的运营模式&#xff0c;提升了企业的竞…...

次元画室+AI绘图工作流:从文字描述到精准提示词的无缝衔接

次元画室AI绘图工作流&#xff1a;从文字描述到精准提示词的无缝衔接 1. 为什么需要AI绘图工作流&#xff1f; 在动漫角色设计领域&#xff0c;创作者们长期面临一个核心矛盾&#xff1a;脑海中有丰富的创意&#xff0c;却难以准确转化为视觉形象。传统工作流程中&#xff0c…...

Cesium使用

Cesium官网&#xff1a;https://cesiumjs.org 官方API文档&#xff1a;https://cesium.com/learn/ion-sdk/ref-doc 中文API文档&#xff1a;https://cesium.xin/cesium/cn/Documentation1.95        https://cesium.xin Cesium中文社区&#xff1a;http://cesiumcn.org …...

3步实现跨次元游戏模组管理:XXMI启动器的多游戏统一解决方案

3步实现跨次元游戏模组管理&#xff1a;XXMI启动器的多游戏统一解决方案 【免费下载链接】XXMI-Launcher Modding platform for GI, HSR, WW and ZZZ 项目地址: https://gitcode.com/gh_mirrors/xx/XXMI-Launcher 还在为《原神》《崩坏&#xff1a;星穹铁道》等多款二次…...

Agent Skill 从使用到原理,一次讲清

目录前言1. 本期内容概览2. Agent Skill 是什么3. Agent Skill 的基本用法4. 高级用法&#xff08;Reference&#xff09;5. 高级用法&#xff08;Script&#xff09;6. 渐进式披露机制7. Agent Skill vs MCP结语参考前言 学习 UP 主 马克的技术工作坊 的 Agent Skill 从使用到…...