1-5-1-设计模式与OOP

news/2025/11/11 15:25:42/文章来源:https://www.cnblogs.com/panhua/p/19210451

理解23种设计模式如何体现面向对象(OOP)思想,能帮助我们在设计和编码时更好地运用这些模式。下面我将这些设计模式按类型分类,并说明它们如何体现了OOP的核心理念。

一、设计模式及其OOP思想

下面是23种设计模式及其体现的OOP思想的汇总表:

模式类型 设计模式 核心OOP思想体现 简要说明
创建型 单例 (Singleton) 封装(控制实例创建)、单一职责(保证一个类仅有一个实例) 确保一个类只有一个实例,并提供一个全局访问点。
原型 (Prototype) 封装(隐藏对象创建细节) 用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象。
工厂方法 (Factory Method) 多态(子类决定创建对象)、依赖倒置(依赖抽象而非具体类) 定义一个创建对象的接口,但由子类决定要实例化的类是哪一个。
抽象工厂 (Abstract Factory) 封装(封装产品族创建)、多态(不同工厂生产不同产品) 提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。
建造者 (Builder) 封装(分步构建复杂对象)、单一职责(将构造代码与表示代码分离) 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
结构型 适配器 (Adapter) 组合(对象适配器)、多态(适配目标接口) 将一个类的接口转换成客户希望的另外一个接口。
桥接 (Bridge) 组合(代替继承)、抽象与实现分离 将抽象部分与它的实现部分分离,使它们都可以独立地变化。
组合 (Composite) 递归组合(部分-整体层次结构)、多态(统一处理单个对象和组合对象) 将对象组合成树形结构以表示“部分-整体”的层次结构。
装饰器 (Decorator) 组合(动态添加功能)、开闭原则(扩展开放,修改关闭) 动态地给一个对象添加一些额外的职责。
外观 (Facade) 封装(简化子系统接口)、迪米特法则(减少客户端与子系统的耦合) 提供了一个统一的接口,用来访问子系统中的一群接口。
享元 (Flyweight) 封装(共享细粒度对象)、节省资源 运用共享技术有效地支持大量细粒度的对象。
代理 (Proxy) 封装(控制访问)、间接性 为其他对象提供一种代理以控制对这个对象的访问。
行为型 职责链 (Chain of Responsibility) 低耦合(解耦发送者和接收者) 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。
命令 (Command) 封装(将请求封装为对象)、单一职责(解耦触发和执行) 将一个请求封装成一个对象,从而使你可以用不同的请求对客户进行参数化。
解释器 (Interpreter) 封装(封装语言规则)、单一职责(文法规则表示) 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。
迭代器 (Iterator) 封装(封装遍历细节)、单一职责(分离集合结构与遍历算法) 提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。
中介者 (Mediator) 迪米特法则(减少对象间直接通信)、封装(集中控制交互) 用一个中介对象来封装一系列的对象交互。
备忘录 (Memento) 封装(捕获并外部化对象状态)、信息隐藏(原发器之外的对象不能访问备忘录内部状态) 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。
观察者 (Observer) 抽象耦合(主题和观察者依赖抽象)、开闭原则(易于增加新观察者) 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
状态 (State) 封装(状态行为局部化)、多态(不同状态不同行为) 允许一个对象在其内部状态改变时改变它的行为。
策略 (Strategy) 封装(封装算法)、多态(可互换的算法)、开闭原则(易于增加新策略) 定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。
模板方法 (Template Method) 封装(固定算法骨架)、多态(子类重定义步骤) 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。
访问者 (Visitor) 开闭原则(易于增加新操作)、双重分发 表示一个作用于某对象结构中的各元素的操作。

二、理解设计模式与OOP原则

设计模式是面向对象设计原则的具体体现和成功应用。它们不是语法规定,而是一套用来提高代码可复用性、可读性、可维护性、稳健性及安全性的解决方案。

常见的OOP原则(如SOLID)是许多设计模式的基础:

  • 开闭原则:对扩展开放,对修改关闭。策略模式、装饰器模式、观察者模式等都很好地体现了这一原则。
  • 依赖倒置原则:高层模块不应该依赖低层模块,二者都应该依赖于抽象。工厂方法模式、抽象工厂模式是这一原则的典型应用。
  • 单一职责原则:一个类应该只有一个引起变化的原因。许多模式如命令模式、迭代器模式都遵循了这一原则。
  • 里氏替换原则:子类必须能够替换掉它们的父类型。这是实现多态的基础,几乎所有基于继承的模式都隐含此原则。
  • 接口隔离原则:使用多个专门的接口,而不使用单一的总接口。这有助于避免“胖接口”问题。
  • 迪米特法则(最少知识原则):一个对象应该对其他对象有最少的了解。外观模式、中介者模式是这一法则的直接体现。
  • 合成复用原则:尽量使用对象组合/聚合,而不是继承来达到复用的目的。桥接模式、组合模式、装饰器模式等都优先使用组合。

三、运用设计模式的注意事项

  1. 理解优于记忆:不要死记硬背23种模式。理解其意图解决的问题以及优缺点更重要。
  2. 原则指导模式:深刻理解OOP设计原则,它们能指导你何时该使用何种模式,甚至是在没有现成模式可用时自己做出良好的设计。
  3. 过度设计是陷阱不要为了使用模式而使用模式。简单的需求如果直接编码就能清晰明了,强行套用模式反而会让代码变得复杂难懂。模式是为了应对变化和复杂性而生的。
  4. 组合使用:在实际系统中,通常会是多种设计模式组合使用,共同构建一个灵活、可维护的架构。

希望这份详细的说明能帮助你建立起设计模式与OOP思想之间的清晰联系。理解和掌握这些模式的最佳方式就是在实践中不断思考和运用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/962477.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1-6-0-总纲

以下是网络编程和I/O模型领域的核心知识原理及面试常见考点的详细总结。我将从网络基础、核心协议、Socket编程、I/O模型到高并发设计逐步展开,并穿插面试高频问题与解答思路。一、网络基础与分层模型 1. 核心分层模型…

1-6-2-网络协议基础

一、基础知识 以下是网络编程和I/O模型领域的核心知识原理及面试常见考点的详细总结。我将从网络基础、核心协议、Socket编程、I/O模型到高并发设计逐步展开,并穿插面试高频问题与解答思路。1、网络基础与分层模型 1.…

1-3-5-AQS详解

AQS(AbstractQueuedSynchronizer)详解 一、AQS是什么? AQS(AbstractQueuedSynchronizer)是Java并发包(java.util.concurrent.locks)中的核心同步框架,用于构建锁和同步工具。其核心设计思想是通过一个FIFO队列…

起飞啦,太easy啦!!!小白的神级AI辅助工具,一句话即可搭建超50个节点的工作流~~~~

嗨,我是小华同学,专注解锁高效工作与前沿AI工具!每日精选开源技术、实战技巧,助你省时50%、领先他人一步。👉免费订阅,与10万+技术人共享升级秘籍!n8n-MCP 是 n8n 的“智能中间件”:它向大模型(如 Claude De…

3-1-1-2-MySQL锁机制

MySQL中锁的分类 1、按照实现方式: 乐观锁、悲观锁; 2、按照作用对象: Lock、Latch 3、按照锁定对象: 全局锁、表锁、页锁、行锁 4、按照操作类型: 共享锁、独占锁 5、按照用途场景: 记录锁、间隙锁、临键锁、意…

Debug日志

2025.11.11 今天在做TFT LCD屏幕 4线SPI时,出现屏幕背光打开,但是屏幕无任何显示。软件进行了debug好久一无所获,最终检查硬件连线,发现CS引脚存在虚焊(量电压竟然有,测试阻抗才发现虚焊),补焊后正常。程序后续…

3-1-1-4-ACID特性底层原理

1、ACID的底层保障机制 一、前言:ACID是事务的核心契约 MySQL的ACID(原子性Atomicity、一致性Consistency、隔离性Isolation、持久性Durability)是事务的基石,其实现依赖InnoDB存储引擎的底层组件协同工作(如日志…

1-6-5-Netty

1、Netty的工作流程和底层机制 要理解Netty的核心价值(高性能、低延迟的异步事件驱动网络框架),必须从其工作流程(业务视角的全链路)和底层机制(技术实现的本质)两方面展开。以下是结构化的拆解: 一、明确Nett…

2025年11月北京离婚房产律师对比榜:五强机构多维评测

当婚姻走到尽头,房产往往成为双方最关切的“硬资产”。在北京,一套房子可能凝聚着两代人积蓄、学区资格、央产政策限制,甚至公司股权与境外信托的交叉安排。用户搜索“北京离婚房产律师”时,通常处于三种场景:一是…

3-1-2-1-MySQL整体架构详解

1、MySQL整体架构 MySQL 整体架构与底层原理详解 MySQL 是一款关系型数据库管理系统(RDBMS),以分层架构为核心设计思想,将功能解耦为多个模块,兼顾扩展性、性能与易维护性。以下从整体架构分层、核心组件底层原理…

3-1-2-2-MySQL分页查询机制

1、MySQL分页查询处理流程 要理解MySQL分页查询的处理流程与底层原理,我们需要从SQL执行生命周期、存储引擎行为、性能瓶颈根源三个维度展开,并结合LIMIT子句的本质展开分析。 一、分页查询的核心语法与本质 MySQL分…

3-1-2-3-MySQL高可用与容灾

1、MySQL高可用与容灾设计全解析 MySQL的高可用(High Availability, HA)聚焦减少服务不可用时间(降低RTO,恢复时间目标),容灾(Disaster Recovery, DR)则关注应对区域性/毁灭性故障(降低RPO,恢复点目标,即数…

打印文件怎么居中,占整个页面

通用核心步骤设置最小页边距:在打印设置中把边距设为0或最小值启用缩放/自适应:让内容自动缩放以填满纸张检查纸张方向:横向/纵向选择能最大化利用空间的方向

3-1-0-MySQL知识总览

在互联网大厂的资深开发岗和架构师岗面试中,数据库知识的考察注重底层原理、分布式架构设计、性能优化及安全防护,核心围绕“如何用数据库支撑高并发、高可用、可扩展的业务场景”展开。以下是全面且深入的数据库知识…

AT AGC043D Merge Triplets 题解

SolutionLink 神题。 手玩一下样例,发现重点肯定在这个顶部元素和 \(3\) 的大小之间的次序关系。考虑最特殊的,即对于 \(n\) 个三元组,都有如 \(A_{i, 1} \lt A_{i, 2} \lt A_{i , 3}\) 的形式,那么我们最终得到一…

4-1-2-Kafka-Broker-log

0、分区目录内物理存储文件类型 Kafka的消息存储体系围绕分区(Partition)展开,每个分区对应一个物理目录,目录内包含核心日志文件、索引文件、事务相关文件及元数据文件四大类,共同支撑消息的高效存储、查询与一致…

SqlSugar 在linux环境下连接sqlserver数据库报错SSL出错,因为升级了驱动,字符串增加Encrypt=True;TrustServerCertificate=True;

Centos 7编辑openssl.cnf文件vim /etc/pki/tls/openssl.cnf#在oid_section=new_oids下增加 openssl_conf = default_conf #在文件末尾增加 [default_conf] ssl_conf = ssl_sect [ssl_sect] system_default = system_de…

2025年11月GPU服务器公司排名:五强技术方案与落地案例对比

如果你正在规划AI训练、工业仿真或大数据建模项目,GPU服务器选型往往决定预算、进度与算力天花板。2025年,国内GPU服务器市场呈现“国产化加速、场景细分、成本敏感”三大趋势:一方面,信创政策要求关键行业优先采用…