工厂设计模式学习笔记 工厂设计模式是一种创建型模式,旨在通过将对象的创建过程封装起来,避免客户端直接实例化具体类,从而实现客户端与具体产品间的解耦。其核心思想是定义抽象产品和抽象工厂接口,由具体工厂负责创建具体产品。 该模式的优点包括提高代码的解耦性、系统的扩展性,并简化客户端代码。然而,它也增加了系统复杂度和维护成本。工厂模式主要分为三种: 1. **简单工厂**:通过静态方法创建产品,虽便捷但新增产品时需修改工厂代码,不符合开闭原则,适用于产品种类不多的简单场景。 2. **工厂方法**:为每个具体产品定义独立的工厂类,通过多态实现,更符合开闭原则,通过配置化可进一步提升灵活性。 3. **抽象工厂**:用于创建一系列相关或相互依赖的产品族,解决多维度产品爆炸问题,适用于产品体系复杂的场景。 选择哪种模式需权衡设计复杂度与业务需求,以实现最佳实践。 2024-02-26 31 0 java 设计模式 创建型设计模式
单例设计模式学习笔记 单例模式 (Singleton Pattern)是一种常用的设计模式, 它的目的是确保某一个类只有一个实例, 而且自行实例化并向整个系统提供这个实例。 单例模式的实现步骤: 构造函数为私有 (private), 外界不能直接创建对象 在类内部创建一个静态私有对象 提供一个公有的静态方法, 用于获取这 2024-02-26 29 0 java 设计模式 创建型设计模式
创建者设计模式学习笔记 创建者模式(Builder Pattern)是一种创建型设计模式,旨在将复杂对象的构建与其表示分离,允许相同的构建过程创建不同的产品表示,从而提升代码的灵活性、可扩展性和可维护性。 其核心角色包括:**产品(Product)**,即被构建的对象;**抽象构建者(Abstract Builder)**,定义构建产品的抽象接口;**具体构建者(Concrete Builder)**,实现抽象接口来具体构建产品各部分;以及**指挥者(Director)**,负责协调具体构建者完成产品构建。 该模式适用于对象有大量可选属性、构造函数参数过多或构建逻辑复杂的情况。优点在于解耦了对象的创建与使用,提升了灵活性并简化了客户端代码。但其缺点是增加了系统中类的数量,可能提高了复杂度。文章以HTML文档的构建为例,展示了产品、抽象与具体构建者以及指挥者如何协作完成复杂对象的构建。 2024-02-26 35 0 java 设计模式 创建型设计模式
状态设计模式学习笔记 状态设计模式是一种行为设计模式,它允许对象根据内部状态改变其行为,从而避免大量条件判断(如if-else)。该模式通过将每个状态封装成独立类,并将行为委托给当前状态对象来实现。其核心组件包括环境(Context,持有当前状态)、抽象状态(State,定义接口)和具体状态(Concrete States,实现特定行为)。优点是符合单一职责和开闭原则,易于维护。 文章随后介绍了有限状态机(FSM),这是一种通过有限状态、转换规则和事件来建模系统行为的模型。虽然状态模式与FSM相关,但状态模式更侧重于对象行为的灵活性和可扩展性,而FSM则侧重于系统整体的建模和分析。文章还探讨了FSM的三种实现方式:分支逻辑法(简单但不易扩展)、查表法(适用于固定规则,易于维护)和状态模式(通过对象封装状态,使状态行为更加清晰和可管理)。 2024-02-26 46 0 java 设计模式 行为型设计模式
观察者设计模式学习笔记 观察者设计模式(Observer Pattern),又称发布-订阅模式,是一种行为型设计模式。它定义了对象之间一对多的依赖关系,当目标对象(Subject)状态改变时,所有依赖它的观察者(Observer)都会收到自动通知并更新。核心优势在于解耦,使观察者与被观察者之间保持松散耦合。主要包含目标对象和观察者两个角色。 文章进一步阐述了发布-订阅模式作为观察者模式的变体或扩展,其关键在于引入了第三方消息代理(如事件总线),进一步解除了发布者和订阅者间的直接通信,增强了系统的灵活性、可扩展性和异步性。 虽然该模式能有效解耦,但也可能带来开发和调试的复杂性,以及Java中消息顺序执行可能导致的性能问题,必要时可采用异步处理。文中通过气象站示例和对Spring Event机制的模拟实现,具体展示了模式的应用。 2024-02-26 27 0 java 设计模式 行为型设计模式
责任链设计模式学习笔记 责任链设计模式(CoR)是一种行为设计模式,旨在将请求发送者与接收者解耦。它允许请求沿着一条处理者链传递,每个处理者根据自身能力决定是否处理该请求;若不能处理,则将请求转发给链中的下一个处理者,直到请求被成功处理或到达链的末端。 其核心组成包括定义处理方法的“处理器接口”、尝试处理或转发请求的“具体处理器”,以及构建并向链首发起请求的“客户端”。CoR的优点在于降低耦合度、增强系统灵活性以及职责指派的灵活性;缺点是可能因长链遍历而影响性能,并增加调试复杂性。 实现方式主要有链表和数组两种。此外,CoR还存在一种特殊变体:请求会被链上所有处理器依次处理,而非中途停止。Java Servlet的`Filter`机制就是典型案例,它通过`FilterChain`的递归调用,确保每个请求都经过所有注册的过滤器。 2024-02-26 26 0 java 设计模式 行为型设计模式
策略设计模式学习笔记 策略设计模式是一种将算法从使用算法的代码中分离出来的设计模式。这种模式允许算法独立于其使用方式进行更改,从而提高了代码的灵活性。 策略设计模式的结构如下: 策略接口:定义算法的接口。 具体策略:实现策略接口的具体算法。 上下文:使用策略接口的对象。 策略设计模式的优点包括: 灵活性:算法可以独立于其 2024-02-26 18 0 java 设计模式 行为型设计模式
模板设计模式学习笔记 模板设计模式介绍 模板设计模式是一种行为设计模式,它允许您定义一个操作的算法骨架,该算法可以被子类重写。这种模式非常适合在需要在基类中定义算法的步骤,但在子类中实现这些步骤的具体实现时。 模板模式,全称是模板方法设计模式,英文是 Template Method Design Pattern。在 Go 2024-02-26 25 0 java 设计模式 行为型设计模式
Java 的 ThreadLocal `ThreadLocal` 是一种提供线程内部局部变量的机制,确保在多线程环境下,每个线程都能独立访问自己的变量副本,互不干扰,从而实现线程隔离和数据传递,减少了公共变量传递的复杂性。它与 `synchronized` 不同,`ThreadLocal` 采用“以空间换时间”的策略(每个线程拥有独立副本),避免了同步带来的性能损耗,而 `synchronized` 采用“以时间换空间”(共享变量,排队访问)。 其核心设计并非 `ThreadLocal` 维护一个 `Map<Thread, Value>`,而是每个 `Thread` 对象内部维护一个 `ThreadLocalMap`。此 `Map` 以 `ThreadLocal` 实例本身为键,线程局部变量的值为值。这种设计减少了单个 `Map` 的条目数,并在线程销毁时自动销毁 `ThreadLocalMap`,优化了内存使用。 常用方法包括 `set()`、`get()` 和 `remove()`。特别强调,使用完毕后务必调用 `remove()` 方法,以防止内存泄漏。`set()` 和 `get()` 方法都通过当前线程获取其内部的 `ThreadLocalMap` 来存储或检索值。 2024-02-23 40 0 java
SpringBoot 整合 NettyWebsocketServer netty 与 websocket Netty是一个网络应用框架,可以用来处理大量的客户端请求。它也可以用来开发高性能的、可扩展的网络应用服务器,例如WebSocket服务器。 WebSocket 是一种为双向通信开发的技术,允许浏览器和服务端进行全双工通信。 它是 HTML5 的一部分,它使得浏览 2024-02-04 29 0 java spring websocket netty