【设计模式】【创建型模式(Creational Patterns)】之抽象工厂模式(Abstract Factory Pattern)

ops/2024/11/23 21:05:56/

1. 设计模式原理说明

工厂方法模式是一种创建型设计模式,它定义了一个用于创建对象的接口,但由子类决定实例化哪一个类。工厂方法让类的实例化推迟到子类。这种模式的核心思想是将对象的创建过程封装起来,使得代码更加灵活和易于扩展。

优点:

  • 符合开闭原则(对扩展开放,对修改关闭),新增产品无需修改现有代码。
  • 客户端只需知道如何使用产品接口而不需要关心具体的实现细节。
  • 系统结构清晰,便于维护和扩展。

缺点:

  • 增加了系统的抽象性和理解难度,增加了系统的复杂度。
  • 每增加一个新的产品就需要增加一个相应的具体创造者类,导致类的数量急剧增加。

2. UML 类图及解释

以下是工厂方法模式的UML类图:

[<title = "工厂方法模式UML类图">]
@startuml
abstract class Creator {+factoryMethod(): Product+anOperation()
}class ConcreteCreator1 {+factoryMethod(): Product
}class ConcreteCreator2 {+factoryMethod(): Product
}interface Product {+operation(): String
}class ConcreteProduct1 {+operation(): String
}class ConcreteProduct2 {+operation(): String
}Creator <|-- ConcreteCreator1
Creator <|-- ConcreteCreator2
Product <|.. ConcreteProduct1
Product <|.. ConcreteProduct2
ConcreteCreator1 --> ConcreteProduct1 : creates >
ConcreteCreator2 --> ConcreteProduct2 : creates >
@enduml

类图解释:

  • Product 接口: 定义了一组操作,所有具体产品都需要实现这些操作。
  • ConcreteProduct1ConcreteProduct2 类: 具体实现了 Product 接口的操作。
  • Creator 抽象类: 定义了一个抽象的工厂方法 factoryMethod(),该方法返回一个 Product 对象,并包含一些通用业务逻辑 anOperation()

http://www.ppmy.cn/ops/136140.html

相关文章

数据集-目标检测系列- 荷花 莲花 检测数据集 lotus>> DataBall

数据集-目标检测系列- 荷花 莲花 检测数据集 lotus>> DataBall DataBall 助力快速掌握数据集的信息和使用方式&#xff0c;会员享有 百种数据集&#xff0c;持续增加中。 贵在坚持&#xff01; 数据样例项目地址&#xff1a; * 相关项目 1&#xff09;数据集可视化项…

对AVEC2014视频进行Dlib或MTCNN人脸裁剪

预处理&#xff1a;人脸裁剪对齐保存的操作 Dlib dlib windows包在资源里 其他代码可查看注释帮助理解 import os import random import cv2 import dlib from imutils.face_utils import FaceAligner, rect_to_bb from tqdm import tqdm # 引入tqdm库# 配置路径 dataset_p…

基于 NCD 与优化函数结合的非线性优化 PID 控制

基于 NCD 与优化函数结合的非线性优化 PID 控制 1. 引言 NCD&#xff08;Normalized Coprime Factorization Distance&#xff09;优化是一种用于非线性系统的先进控制方法。通过将 NCD 指标与优化算法结合&#xff0c;可以在动态调整控制参数的同时优化控制器性能。此方法特别…

【强化学习+组合优化】SAC + PointerNetwork 解决TSP问题

TSP强化学习环境见之前的博客&#xff1a;https://blog.csdn.net/weixin_41369892/article/details/131519384 先上效果&#xff0c;跑了20个点&#xff0c;感觉不是很好&#xff08;RL解决组合优化问题真的不好调参&#xff09; 平均总距离随训练的变化&#xff0c;可以看出的…

淘宝评论大冒险:Java爬虫的“探险记”

在互联网的海洋中&#xff0c;淘宝无疑是一座巨大的宝藏岛&#xff0c;而商品评论就是岛上那些闪闪发光的金币。今天&#xff0c;我们将化身为Java程序员&#xff0c;驾驶着我们的爬虫号&#xff0c;去淘宝的海域里寻找那些隐藏在商品页面下的评论金币。请系好安全带&#xff0…

Spring Boot Web应用开发:创建RESTful服务

Spring Boot使得创建RESTful服务变得非常简单。通过使用Spring Web MVC提供的注解&#xff0c;可以轻松定义控制器、处理请求和返回响应。 RestController与Controller的区别 RestController和Controller是Spring MVC中的两个用于定义控制器的注解&#xff0c;它们的主要区别…

Windows多JDK版本管理工具JVMs

Windows多JDK版本管理工具JVMs 官网安装使用手动下载jdk 官网 https://github.com/ystyle/jvms 下载 https://github.com/ystyle/jvms/releases 当前下载版本为v2.1.6 安装 下载后&#xff0c;解压到某个目录。 比如&#xff1a;D:\soft\JVMs\jvms_v2.1.6_amd64 把这个目录…

Vue开发04:结合Vue 2 总结C# 常见方法的JavaScript实现

测试地址 在线运行Vue组件 一、Trim()方法 去除首末 <template><div><p>原始字符串: "{{ originalStr }}"</p><p>处理后的字符串: "{{ trimmedStr }}"</p></div> </template><script> export d…