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

embedded/2025/2/13 0:38:43/

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/embedded/140540.html

相关文章

Ubuntu22.04配置强化学习环境及运行相关Demo

什么是强化学习 强化学习&#xff08;Reinforcement Learning&#xff0c;简称 RL&#xff09;是机器学习中的一个重要分支&#xff0c;属于一种基于试错机制的学习方法。它通过让智能体&#xff08;Agent&#xff09;与环境&#xff08;Environment&#xff09;进行交互&…

【jvm】为什么java是半编译半解释型语言

目录 1. 编译过程2. 解释过程3. 即时编译&#xff08;JIT&#xff09;过程4. 半编译半解释型语言的特点 1. 编译过程 1.Java源代码首先会被编译成字节码&#xff08;Bytecode&#xff09;&#xff0c;这是一种与具体平台无关的中间代码。2.这一编译过程由Java编译器&#xff0…

RUST学习教程-安装教程

文章目录 参考文档安装教程更新卸载 参考文档 https://course.rs/first-try/installation.html 安装教程 Linux或者mac安装教程 curl --proto https --tlsv1.2 https://sh.rustup.rs -sSf | sh安装完成&#xff0c;当出现command not found的时候&#xff0c;需要source一下…

网络安全 - DOS

1.1.1 摘要 最近网络安全成了一个焦点&#xff0c;除了国内明文密码的安全事件&#xff0c;还有一件事是影响比较大的——Hash Collision DoS&#xff08;通过Hash碰撞进行的拒绝式服务攻击&#xff09;&#xff0c;有恶意的人会通过这个安全漏洞让你的服务器运行巨慢无比&…

深入理解下oracle 11g block组成

深层次说&#xff0c;oracle数据库的最少组成单位应该是块&#xff0c;一般默认情况下&#xff0c;oracle数据库的块大小是8kb&#xff0c;其中存储着我们平常所需的数据。我们在使用过程中&#xff0c;难免会疑问道&#xff1a;“oracle数据块中到底是怎样组成的&#xff0c;平…

Dubbo Golang快速开发Rpc服务

开发 RPC Server & RPC Client 基于 Dubbo 定义的 Triple 协议&#xff0c;你可以轻松编写浏览器、gRPC 兼容的 RPC 服务&#xff0c;并让这些服务同时运行在 HTTP/1 和 HTTP/2 上。Dubbo Go SDK 支持使用 IDL 或编程语言特有的方式定义服务&#xff0c;并提供一套轻量的 …

java: spire.pdf.free 9.12.3 create pdf

可以用windows 系统中文字体&#xff0c;也可以从文件夹的字体文件 /*** encoding: utf-8* 版权所有 2024 ©涂聚文有限公司* 许可信息查看&#xff1a;言語成了邀功盡責的功臣&#xff0c;還需要行爲每日來值班嗎* 描述&#xff1a;* # Author : geovindu,Geovin Du 涂…

数据结构哈希表-(开放地址法+二次探测法解决哈希冲突)(创建+删除+插入)+(C语言代码)

#include<stdio.h> #include<stdlib.h> #include<stdbool.h> #define M 20 #define NULLDEL -1 #define DELDEY -2typedef struct {int key;int count; }HashTable;//创建和插入 void Insert(HashTable ha[], int m, int p, int key) {int i, HO, HI;HO key…