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

模块方法模式(Module Method Pattern)

🧠 模块方法模式(Module Method Pattern)

模块方法模式是一种结构型设计模式,它将复杂的操作分解成一系列相对简单、独立且单一职责的模块。每个模块负责完成一种具体的操作,其他模块或系统可以通过调用这些模块的公开方法来执行特定任务。

这种模式通常用于解决代码复杂性过高的问题,通过将系统分解为多个模块,使每个模块有清晰的职责和功能。


🎯 为什么需要模块方法模式?

  1. 降低复杂度:系统过于复杂时,模块方法模式可以将系统划分为多个模块,每个模块负责具体的业务逻辑。这样可以降低单个模块的复杂度,便于维护。
  2. 增强模块化:将不同功能的模块独立出来,模块之间通过公开方法进行交互。每个模块的实现相对独立,可以提升系统的可扩展性。
  3. 提高可维护性:各个模块具有明确的责任,系统出现问题时,可以只关注出问题的模块,而不需要了解整个系统的实现细节。
  4. 支持代码重用:独立模块可以在其他系统中复用,只需调用模块方法即可。

优缺点分析

优点缺点
模块化设计使得系统容易扩展当系统中模块较多时,管理和维护可能变得复杂
代码的可读性和可维护性较高模块之间的接口可能会产生一定的耦合
便于测试每个模块的功能如果模块过于独立,可能导致功能重复或冗余
便于集成第三方库系统启动时可能会加载过多的模块,影响性能

🧩 Python 示例:学生管理系统

我们将通过一个学生管理系统来示例模块方法模式。系统中有三个主要功能模块:

  1. 学生信息模块:管理学生的信息(如姓名、年龄等)。
  2. 成绩模块:管理学生的成绩。
  3. 课程模块:管理课程信息。

每个模块都有自己的方法,其他模块或系统通过调用这些方法来执行相应的任务。

🎯 1️⃣ 学生信息模块(Student Module)

class StudentModule:def __init__(self):self.students = {}def add_student(self, student_id: int, name: str, age: int):"""添加学生信息"""self.students[student_id] = {'name': name, 'age': age}def get_student_info(self, student_id: int):"""获取学生信息"""return self.students.get(student_id, "Student not found")
  • add_student():添加学生信息。
  • get_student_info():获取学生信息。

🎯 2️⃣ 成绩模块(Grade Module)

class GradeModule:def __init__(self):self.grades = {}def add_grade(self, student_id: int, course_name: str, grade: float):"""为学生添加成绩"""if student_id not in self.grades:self.grades[student_id] = {}self.grades[student_id][course_name] = gradedef get_grades(self, student_id: int):"""获取学生的成绩"""return self.grades.get(student_id, "Grades not found")
  • add_grade():为学生添加成绩。
  • get_grades():获取学生成绩。

🎯 3️⃣ 课程模块(Course Module)

class CourseModule:def __init__(self):self.courses = {}def add_course(self, course_id: int, course_name: str):"""添加课程"""self.courses[course_id] = course_namedef get_course_info(self, course_id: int):"""获取课程信息"""return self.courses.get(course_id, "Course not found")
  • add_course():添加课程信息。
  • get_course_info():获取课程信息。

🎯 4️⃣ 上下文类(SchoolSystem)

上下文类将这些独立的模块整合在一起,提供一个接口,方便外部代码调用每个模块的功能。

class SchoolSystem:def __init__(self):self.student_module = StudentModule()self.grade_module = GradeModule()self.course_module = CourseModule()def add_student(self, student_id: int, name: str, age: int):self.student_module.add_student(student_id, name, age)def get_student_info(self, student_id: int):return self.student_module.get_student_info(student_id)def add_grade(self, student_id: int, course_name: str, grade: float):self.grade_module.add_grade(student_id, course_name, grade)def get_grades(self, student_id: int):return self.grade_module.get_grades(student_id)def add_course(self, course_id: int, course_name: str):self.course_module.add_course(course_id, course_name)def get_course_info(self, course_id: int):return self.course_module.get_course_info(course_id)
  • SchoolSystem 类整合了所有的功能模块。外部调用 SchoolSystem 的方法时,实际上是通过它来调用各个模块的方法。

🎯 5️⃣ 客户端代码:使用学校系统

# 创建学校系统对象
school_system = SchoolSystem()# 添加学生信息
school_system.add_student(1, "Alice", 20)
school_system.add_student(2, "Bob", 22)# 添加课程信息
school_system.add_course(101, "Math")
school_system.add_course(102, "History")# 添加成绩信息
school_system.add_grade(1, "Math", 90)
school_system.add_grade(1, "History", 85)
school_system.add_grade(2, "Math", 75)# 获取学生信息
print(school_system.get_student_info(1))  # 获取Alice的信息# 获取学生成绩
print(school_system.get_grades(1))  # 获取Alice的成绩
print(school_system.get_grades(2))  # 获取Bob的成绩# 获取课程信息
print(school_system.get_course_info(101))  # 获取Math课程信息

输出结果

{'name': 'Alice', 'age': 20}
{'Math': 90, 'History': 85}
{'Math': 75}
Math

🧭 类图(Mermaid)

管理
管理
管理
StudentModule
+add_student(student_id: int, name: str, age: int)
+get_student_info(student_id: int)
GradeModule
+add_grade(student_id: int, course_name: str, grade: float)
+get_grades(student_id: int)
CourseModule
+add_course(course_id: int, course_name: str)
+get_course_info(course_id: int)
SchoolSystem
+add_student(student_id: int, name: str, age: int)
+get_student_info(student_id: int)
+add_grade(student_id: int, course_name: str, grade: float)
+get_grades(student_id: int)
+add_course(course_id: int, course_name: str)
+get_course_info(course_id: int)

🧭 流程图(Mermaid)

User SchoolSystem StudentModule GradeModule CourseModule add_student(1, "Alice", 20) add_student(1, "Alice", 20) add_course(101, "Math") add_course(101, "Math") add_grade(1, "Math", 90) add_grade(1, "Math", 90) get_student_info(1) get_student_info(1) {"name": "Alice", "age": 20} get_grades(1) get_grades(1) {"Math": 90} User SchoolSystem StudentModule GradeModule CourseModule

🧠 应用场景总结

场景示例
功能模块化系统中需要拆分为多个相互独立的功能模块,各模块之间通过接口互相协作
大型应用大型系统,功能多且复杂,模块化有助于解耦和分工
可扩展性强需要随时添加新的功能模块时(如增加新的支付方式、报告类型等)

总结口诀

模块方法模式
✅ 将系统中的不同功能封装为模块,每个模块具有独立的职责。通过调用模块的公开方法来完成相应的操作,提升系统的可扩展性和可维护性。


如果你对这个模式或代码有疑问,或想了解更复杂的用例,随时告诉我!

相关文章:

  • scroll-view高度自适应
  • 线程池配置不合理:系统性能的隐形杀手(深度解析版)
  • SpringCloud多环境配置的一些问题
  • 基于 HTML5 的贪吃蛇小游戏实现
  • PE文件结构(导出表)
  • Linux 系统下VS Code python环境配置!
  • Cisco NDO - Nexus Dashboard Orchestrator
  • 六、shell脚本--正则表达式:玩转文本匹配的“万能钥匙”
  • Dify网页版 + vllm + Qwen
  • 论文报错4
  • Ubuntu安装编译环境
  • JookDB:一款国产的通用数据库开发工具
  • 网络传输中字节序
  • PostgreSQL 的 pg_current_wal_lsn 函数
  • Pinia状态管理工具速成
  • 【NLP】 28. 语言模型的评估方式:MRR, PERPLEXITY, BLEU, WER从困惑度到实际效果
  • C++ 类与对象(下)—— 进阶特性与底层机制解析(构造函数初始化,类型转换,static成员,友元,内部类,匿名对象)
  • torch.nn.Sequential() and torch.nn.ModuleList()
  • Linux 系统的指令详解介绍
  • 位运算的应用
  • 抗战回望18︱《广西学生军》:“广西的政治基础是青年”
  • 多地政府机关食堂迎来大客流,重庆荣昌区委书记给厨师们鼓劲
  • 特朗普考虑任命副幕僚长米勒任国安顾问,曾策划驱逐移民行动
  • 五一车市消费观察:政策赋能、企业发力,汽车消费火热
  • 中小企业数字化转型的破局之道何在?
  • “五一”假期余额不足两天,多地景点已约满、限流