建造者模式 (Builder Pattern) 深度解析
🏗️ 建造者模式 (Builder Pattern) 深度解析 1. 模式动机与定义 1.1. 模式动机:分离复杂对象的构建与表示 在现实世界和软件系统中,存在许多复杂的对象,它们由多个组成部分构成(例如一辆汽车包含车轮、发动机、方向盘等)。 问题:对于大多数用户而言,他们只需要一个完整的对象(一辆汽车),而不需要知道这些部件的装配细节,也不能随意更改组装顺序,因为某些属性的赋...
🏗️ 建造者模式 (Builder Pattern) 深度解析 1. 模式动机与定义 1.1. 模式动机:分离复杂对象的构建与表示 在现实世界和软件系统中,存在许多复杂的对象,它们由多个组成部分构成(例如一辆汽车包含车轮、发动机、方向盘等)。 问题:对于大多数用户而言,他们只需要一个完整的对象(一辆汽车),而不需要知道这些部件的装配细节,也不能随意更改组装顺序,因为某些属性的赋...
📢 观察者模式 (Observer Pattern) 深度解析 1. 模式动机与定义 1.1. 模式动机:建立松耦合的一对多依赖 在软件系统中,经常需要建立一种对象与对象之间的依赖关系:当一个对象(观察目标/Subject)发生改变时,需要自动通知其他一个或多个对象(观察者/Observer),并让它们做出相应的反应。 核心需求: 低耦合:观察目标不应该知...
📝 适配器模式 (Adapter Pattern) 深度解析 🚀 1. 模式动机 (Motivation) 在软件开发中,我们常常遇到这样的情况:现有的类已经实现了所需的功能,但它提供的接口(方法名、参数等)与客户端期望的接口不兼容,导致客户端无法直接使用。 适配器模式的设计灵感来源于现实中的电源适配器或读卡器: 它定义一个包装类(适配器 Adapter),去包装那个接口不兼容...
🚶 访问者模式 (Visitor Pattern) 深度解析 1. 模式动机与定义 1.1. 模式动机:分离操作与数据结构 在一个对象结构(如复杂的树形或列表)中,包含了很多不同类的对象。我们经常需要对这些对象执行各种不相关的操作(例如:计算成本、生成报表、执行类型检查)。 问题:如果将所有操作都放在元素类内部,会导致: 元素类职责过多,违反单一职责原则。...
🏛️ 外观模式 (Facade Pattern) 深度解析 1. 模式动机与定义 1.1. 模式动机:简化复杂子系统的访问 在复杂的软件系统中,通常会划分为多个子系统,每个子系统包含大量的类和复杂的交互逻辑。客户端如果需要调用一项功能,往往需要了解并操作多个子系统中的多个接口。 问题:客户端与子系统内部的复杂性之间存在高度的耦合,导致代码复杂、难以维护和使用。 解决方案:引...
🎁 装饰模式 (Decorator Pattern) 深度解析 1. 模式动机与定义 1.1. 模式动机:灵活地扩展对象功能 给一个类或对象增加行为,通常有两种主要方式: 继承机制:通过继承现有类来添加功能。这是静态的,功能在编译时确定,且会随着扩展功能增多导致子类数量爆炸性增长。 关联机制 (装饰模式):将一个类的对象嵌入另一个对象中(即使用组合/聚合),由外部对象(装饰...
用户态 tcpdump 如何实现抓到内核网络包的? 原创张彦飞allen开发内功修炼2021-09-08 08:28 收录于话题#开发内功修炼之网络篇30个 大家好,我是飞哥! 今天聊聊大家工作中经常用到的 tcpdump。 在网络包的发送和接收过程中,绝大部分的工作都是在内核态完成的。那么问题来了,我们常用的运行在用户态的程序 tcpdump 是那如何实现抓到内核态的包的呢?有的...
📝 责任链模式 (Chain of Responsibility Pattern) 深度解析 🚀 1. 模式意图与动机 (Intention & Motivation) 意图 责任链模式 (Chain of Responsibility Pattern): 使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请...
🌳 组合模式 (Composite Pattern) 深度解析 1. 模式动机与定义 1.1. 模式动机:统一处理部分和整体 在许多场景中,我们需要处理树形结构或部分-整体 (Part-Whole) 的层次结构。例如,文件系统中的文件和文件夹、组织结构中的员工和部门、GUI 框架中的组件和容器。 问题:处理单个对象(叶子)和组合对象(树枝)的方式往往不同。如果客户端需要区分这两...
命令模式 (Command Pattern) 深度解析 1. 模式动机与定义 1.1. 模式动机:解耦请求的发送者与接收者 在软件设计中,我们经常需要向某些对象发送请求,但并不清楚请求的接收者是谁,也不知道被请求的具体操作是哪个。我们只需要在运行时指定具体的请求接收者即可。 命令模式的引入,使得请求发送者与请求接收者消除彼此之间的耦合,让对象之间的调用关系更加灵活。发送请求的对象只需...