基础篇(设计模式) ---设计模式解析及练习

代码重构练习与设计模式解析 本文深入探讨了多种代码重构练习方法,包括识别和消除代码异味、正反向重构、Defactoring 实践等。通过提炼方法、提取类、重命名等手段提升代码质量,并介绍了如何通过‘Follow Your Nose’、‘Kata’等方式持续优化代码结构。此外,还涉及了命名规范、死代码清理、日志系统整合及工厂模式设计等内容,全面覆盖重构实践与设计原则。 阅读详情

目录

概述

原则

分类

项目练习源码

参考


概述

    设计模式具体来说可以被称为GOF设计模式,是1995 年,GoF(Gang of Four,四人组/四人帮)合作出版了

  《设计模式:可复用面向对象软件的基础》一书,共收录了 23 种设计模式,从此树立了软件设计模式领域的里程碑

    设计模式(Design Pattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路。

    它不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案

    设计模式的本质是面向对象设计原则的实际运用,是对类的封装性、继承性和多态性,以及类的关联关系和组合

    关系的充分理解。

原则

    开闭原则

开闭原则由勃兰特·梅耶(Bertrand Meyer)提出,他在 1988 年的著作《面向对象软件构造》中提出:

软件实体应当对扩展开放,对修改关闭。这就是开闭原则的经典定义。

     里氏替换原则

里氏替换原则主要阐述了有关继承的一些原则,以及其中蕴含的原理。它反映了基类与子类之间的关系,

是对开闭原则的补充,是对实现抽象化的具体步骤的规范。

     依赖倒置原则

高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象

其核心思想是:要面向接口编程,不要面向实现编程。

    单一职责原则

单一职责原则又称单一功能原则,由罗伯特·C.马丁(Robert

C++从入门到精通系列教程之第十六篇:设计模式基础与实践 设计模式是针对软件设计中常见问题的通用解决方案,它们不是现成的代码,而是一套经过总结的设计思想和实践经验。提高代码复用性:避免重复造轮子,解决类似问题时可以借鉴已有的方案。降低耦合性:通过明确分工和接口设计,使系统各模块间的依赖降低。增强灵活性与可扩展性:让系统更容易应对需求变化,便于后期维护和扩展。单例模式确保在系统中某个类只有一个实例,并提供一个全局访问点。适用于需要全局共享资源的场景,如配置管理器、日志系统、数据库连接池等。 阅读详情

相关推荐

设计模式基础解析

设计模式是一种用于解决软件设计问题的经验总结,是在软件开发过程中经验丰富的开发者们总结出来的最佳实践。通过使用设计模式,开发者可以在设计阶段就避免常见的设计陷阱,提高代码的可重用性和可维护性。设计模式根据其目的和使用方式可以分为三类:创建型模式、结构型模式和行为型模式。

vvilkin的学习备忘 817

【P0】设计模式篇

设计模式七大原则是构建高质量代码的基石,包括开闭原则(OCP)、单一职责原则、接口隔离原则、里氏替换原则、依赖倒置原则、迪米特法则和合成复用原则。这些原则旨在实现程序的高重用性、可读性、扩展性、可靠性和低耦合高内聚。单一职责原则要求每个类/接口/方法只承担一项职责,通过职责分离降低复杂度、提升可维护性,同时减少变更风险。例如将日志服务与用户服务分离,使系统更灵活稳定。遵循这些原则能有效解决软件开发中的耦合性和维护性问题。

weixin_50999696的博客 1062

Java设计模式之享元模式:从基础到高级的全面解析

享元模式是一种结构型设计模式,旨在通过共享技术减少大量细粒度对象的内存消耗。其核心思想是将对象的“内在状态”与“外在状态”分离,内在状态存储在享元对象内部且可共享,而外在状态由客户端维护且不可共享。享元模式通过共享相似对象来减少创建新对象的数量,从而提高性能和节省资源。典型的实现包括抽象享元类、具体享元类、享元工厂类和客户端。享元工厂负责创建和管理享元对象,确保相同内在状态的对象只被创建一次。通过这种方式,享元模式在处理大量相似对象时能够显著降低内存占用。

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 1530

设计模式全解析:从基础到实战综合应用

设计模式专栏摘要 本专栏系统讲解23种设计模式,涵盖创建型(单例、工厂等)、结构型(代理、适配器等)和行为型(观察者、策略等)三大类,通过Java/Python等代码示例解析原理与应用场景。内容包含SOLID设计原则、代码复用技巧,并展示电商系统、游戏开发等实战案例中的综合运用,帮助开发者提升代码质量与架构能力。适合熟悉OOP的中级程序员学习,配套JDK新特性、MySQL等系列专栏,形成完整技术进阶路径。

fykam的博客 777

Java设计模式之访问者模式:从基础到高级的全面解析

访问者模式是一种将数据结构与操作分离的行为型设计模式。它通过在抽象访问者中定义访问方法,允许在不修改元素类的情况下扩展新操作。主要角色包括抽象访问者、具体访问者、抽象元素、具体元素和对象结构。该模式的优点是符合单一职责原则、扩展性好,但缺点是增加新元素类困难且可能破坏封装性。典型应用场景如商品价格计算,通过访问者实现不同价格策略而不改变商品类本身。

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 1181

Android 23种设计模式全面解析

一、设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 其实还有两类:并发型模式和线程池模式。用一个图片来整体描述一下: 二、设计模式的六大原则 总原则:开闭原则(.

鸿蒙开发知识记录 3193

23种设计模式【Java】全案例解析

具体解析 创建型 结构型 7个原则 单一职责原则【SINGLE RESPONSIBILITY PRINCIPLE】: 一个类负责一项职责。 里氏替换原则【LISKOV SUBSTITUTION PRINCIPLE】: 继承与派生的规则。 依赖倒置原则【DEPENDENCE INVERSION PRINCIPLE】: 高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。即针对接口编程,不要针对实现编程。 接口隔离原则【INTERFACE SEGREGATION PRINC

liyifan687的博客 2892

【设计模式】用Java手写21种常见设计模式

文章目录十二、行为1——模板方法模式十三、行为2——迭代器模式 配套使用效果更佳: 本博客配套开源源码github点击跳转 在《25种常见设计模式思想(上)》中我介绍了4种创建型设计模式和7种结构型设计模式,在此博客中我将继续介绍剩下的x种行为类设计模式。以下是本篇博客的思维导图: 十二、行为1——模板方法模式 模板方法模式非常类似于定制表格,设计者先将所有需要填写的信息头(字段名)抽取出来,再将它们整合在一起成为一种既定格式的表格,最后让填表人按照这个标准化模板去填写自己特有的信息,而不必为书写内容、先

TracyCoder的博客 5075

软件设计师之设计模式探秘:创建型设计模式解析

大家好!在软件开发的学习和实践中,我发现设计模式就像是一套高效的编程“工具箱”,能帮助我们更优雅、更高效地解决各种问题。今天,咱们就一起来深入探索设计模式中的创建型设计模式,希望能在交流中共同进步,掌握这些实用的设计技巧。

wj_rdk的博客 1776

9、游戏设计模式创建的常见问题及基础练习解析

本文深入剖析了游戏设计模式创建中的常见问题,包括循环模式、规定性不足、急于下结论、反模式误区以及权威认知偏差。同时介绍了系统的基础模式练习方法,通过确定设计元素、列举游戏、分析用途、寻找模式等步骤,帮助设计师创建有效的游戏设计模式。文章还通过跳跃机制的实例,展示了模式练习的实际应用流程与价值。

gray5的博客 74

【C++设计模式】工厂方法设计模式:深入解析从基础到进阶

工厂方法模式提供了一种通用的方式来创建对象实例,它能够很好地隐藏实现细节,特别是对于派生类的实现细节。这种模式属于创建型设计模式,核心在于将对象的创建和使用分离,通过一个工厂函数,根据输入参数来返回正确的对象实例。工厂方法模式作为一种强大且实用的设计模式,为对象的创建提供了一种优雅而灵活的解决方案。从基础的定义和实现,到进阶的优化和功能扩展,我们逐步深入了解了该模式的各个方面。通过合理运用继承、多态、单例模式以及智能指针等技术,我们可以充分发挥工厂方法模式的优势,同时避免其潜在的缺点。

885

8、游戏设计模式入门与常见问题解析

本文介绍了游戏设计模式的入门知识与常见问题解析,重点探讨了如何从具体设计元素中提炼出具有通用性的设计模式。通过‘神秘驱动探索’等示例,详细说明了模式的构建步骤与关键思考点,并针对模式设计中容易出现的问题,如忽视设计问题、浅层次分析等,提出了改进方法和流程。文章旨在帮助游戏设计师构建更具洞察力和灵活性的模式语言,以支持日常设计实践。

gray5的博客 68

33、基础设计模式解析

本文详细解析了几种常见的基础设计模式,包括Gateway、Mapper、Layer Supertype和Separated Interface,涵盖了它们的定义、工作原理、使用场景、示例代码以及与其他模式的区别。文章还讨论了这些模式的选择与权衡、最佳实践,并通过电商系统的实际案例展示了它们的应用和优势。通过合理使用这些设计模式,可以提升代码质量,使系统更加健壮、可维护和可扩展。

zeta9的博客 84

设计模式解析习题解答,已经做好目录标签

Design Patterns Explained - Review Questions and Answers Table of Contents • Chapter 1: The Object-Oriented Paradigm • Chapter 2: The UML - The Unified Modeling Language • Chapter 3: A Problem That Cries Out for Flexible Code • Chapter 4: A Standard Object-Oriented Solution • Chapter 5: An Introduction to Design Patterns • Chapter 6: The Façade Pattern • Chapter 7: The Adapter Pattern • Chapter 8: Expanding Our Horizons • Chapter 9: The Strategy Pattern • Chapter 10: The Bridge Pattern • Chapter 11: The Abstract Factory Pattern • Chapter 12: How Do Experts Design? • Chapter 13: Solving The CAD/CAM Problem with Patterns • Chapter 14: The Principles and Strategies of Design Patterns • Chapter 15: Commonality and Variability Analysis (CVA) • Chapter 16: The Analysis Matrix • Chapter 17: The Decorator Pattern • Chapter 18: The Observer Pattern • Chapter 19: The Template Method Pattern • Chapter 20: Lessons from Design Patterns: Factories • Chapter 21: The Singleton Pattern and the Double-Checked Locking Pattern • Chapter 22: The Object Pool Pattern • Chapter 23: The Factory Method Pattern • Chapter 24: Summary of Factories (no review questions) • Chapter 25: Design Patterns Reviewed: A Summation and a Beginning

MD01和MD01N比较

摘要:MD01(传统MRP)与MD01N(MRP Live)是SAP系统不同版本的物料需求计划事务码。核心差异包括:MD01N取消MRP列表、简化计划规则、合并MPS/MRP操作、采用BAdI技术等,体现S/4HANA平台简化、标准化和智能化的演进方向。MD01N通过优化参数配置、增强筛选功能、利用HANA实时计算能力,实现了更高效的物料计划流程,代表了新一代计划引擎的技术革新。

SAP_LES_COM的博客 891

生物信息学新手必看:MAFFT多序列比对从安装到实战(附参数优化技巧)

本文为生物信息学新手提供了MAFFT多序列比对工具的完整指南。从Linux环境下的安装部署,到核心算法策略(如FFT-NS-i、L-INS-i)的选择逻辑,再到空位罚分等关键参数的深度解析与优化技巧,手把手教你完成从原始序列到高质量比对结果的实战流程,为后续进化树构建等分析奠定坚实基础。

weixin_29230773的博客 484

大模型越狱指令数据集全解析:从AdvBench到HarmBench

本文全面解析了AdvBench、HarmBench等主流大模型越狱指令数据集。AdvBench作为基础测试集,用于快速评估模型安全基线;HarmBench则以其全面的文本、多模态及对抗性攻击评估,成为当前权威的深度安全审计工具。文章还介绍了MaliciousInstruct、JailbreakBench等特色数据集,并提供了根据实际场景选择与使用这些数据集的具体实战指南。

weixin_29327525的博客 616

信贷系统学习总结(6)—— 贷前、贷中、贷后全流程核心模型解析

本文系统解析了金融风控模型的技术演进与应用实践。从贷前、贷中到贷后全流程,详细介绍了A卡、B卡、C卡三类核心评分模型,以及反欺诈、动态监控、催收优化等关键技术的实现路径。重点阐述了特征工程设计、模型验证指标、联邦学习等创新应用,并提供了多个实战案例数据。同时提出了算法选择的"黄金三角"原则和分阶段技术演进路线,强调数据治理、模型全生命周期管理和复合型团队建设的重要性。文章指出未来风控将向决策智能化、数据无感化和风险预知化方向发展,需要平衡技术创新与合规要求。

科技D人生 1219

AI原生SaaS应用的自动化运维体系构建

随着ChatGPT掀起的AI原生应用浪潮,越来越多SaaS(软件即服务)产品开始以"AI优先"的方式设计——从用户交互到核心功能,都深度依赖机器学习模型(如推荐算法、智能客服)、实时数据流(如用户行为分析)和弹性算力(如大模型推理)。这类应用的运维需求与传统SaaS完全不同:传统运维像"修水管",哪里漏了补哪里;AI原生运维则像"照顾会成长的宠物",需要实时感知模型状态、数据变化和流量波动,主动调整资源。

AI天才研究院 1079

实战优化!C#上位机串口通信卡顿问题:超时机制+数据缓存方案

串口名</param>/// <param name="baudRate">波特率

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1063

KVM — 与 QEMU 和 Libvirt 的关系

目录目录 前言 KVM QEMU KVM 与 QEMU qemu-kvm Libvirt Libvirt 在 OpenStack 中的应用前言如果是刚开始接触虚拟机技术的话, 对上述的概念肯定会有所混淆, 傻傻的分不清. 尤其在看虚拟化技术文档时导致理解能力下降, 所以在开始学习虚拟化技术之前对这些概念有一个整体的认识和清晰的理解, 就显得很有必要了.KVMKVM(Kernel-basedVirtu

烟云的计算 5736

pi-coding-agent 完整详解

pi-coding-agent是一个由Mario Zechner开发的专业AI编程助手,基于Node.js和TypeScript构建。核心功能包括:1)多级思考模式(ThinkingLevel),从none到ultra控制推理深度;2)对话压缩(compaction)管理长对话记忆;3)WebSocket实时通信支持流式交互。该智能体支持代码生成、调试、重构等专业编程任务,采用AI Agent架构,具备工具调用和多轮记忆能力。项目结构通常包含server、agent、config等模块,可通过二次开发扩展功

大坡3D软件开发 2413

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

上一篇: 工具篇(Docker)---Windows上安装使用Docker
下一篇: 工具篇(Maven)---Maven详解
Coder_Light
博客等级 码龄9年 30粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值