装饰者模式
基本概念装饰者模式:是一种结构型设计模式,动态地将额外责任附加到对象上。对于拓展功能,装饰者提供了子类化之外的弹性替代方案,提供了比子类化更灵活的拓展方案,允许在运行时动态添加或删除对象的行为。 核心思想是:使用装饰者包装原始对象,装饰者与原始对象实现相同接口,从而在不修改原始对象的前提下,为其添加新功能。 核心结构 Component(组件):定义对象接口,装饰者和被装饰者都实现此接口 ConcreteComponent(具体组件):接口的具体实现类,即被装饰的原始对象 Decorator(装饰者抽象类):持有组件引用,实现与组件相同的接口 ConcreteDecorator(具体装饰者):实现装饰逻辑,为组件添加新功能 示例说明 场景一:有一家咖啡连锁店,需要设计一个下单系统,其中需要设计一个拓展性强且耦合性低的咖啡设计结构,用户能够选择不同的调料,各种调教价格不一,同时存在后续新增的调料。 咖啡基类 12345678910// 咖啡基类public abstract class Beverage { String description = ”Un...
状态模式
基本概念状态模式:是一种行为型设计模式,允许对象在内部状态改变时改变它的行为,对象看起来似乎修改了它的类。 核心思想:将状态抽象为独立的类,上下文对象持有状态对象的引用,当状态改变时,只需更换状态对象,从而改变上下文的行为,避免使用大量条件判断语句。 核心结构 State(状态接口):定义所有具体状态必须实现的接口,声明状态相关的方法 ConcreteState(具体状态):实现状态接口,定义特定状态下的行为 Context(上下文):持有当前状态对象的引用,将状态相关的请求委托给当前状态对象处理 示例说明场景:设计一个手机播放器,具有”播放”、”暂停”、”停止”三种状态,不同状态下点击按钮会有不同行为。 状态接口 1234567public interface PlayerState { void clickPlay(); // 点击播放 void clickPause(); // 点击暂停 void clickStop(); // 点击停止} 播放状态 12345678910111213141...
迭代器模式
基本概念迭代器模式:一种行为型设计模式,它提供一种顺序访问集合对象元素的方法,而无需暴露集合的内部表示。通过将遍历逻辑与集合本身解耦,使得不同遍历方式可以独立变化。 核心结构 迭代器接口(Iterator):定义遍历元素的方法(如hasNext()、next()、remove())。 具体迭代器(Concrete Iterator):实现迭代器接口,维护遍历的当前位置。 聚合接口(Aggregate):定义创建迭代器的方法(如createIterator())。 具体聚合(Concrete Aggregate):实现聚合接口,返回具体迭代器实例。 示例说明场景:自定义数组的迭代器 定义迭代器接口 12345678// 迭代器接口interface Iterator<T> { boolean hasNext(); // 是否有下一个元素 T next(); // 获取下一个元素 void remove(); // 删除当前元素(可选)} 定义聚合接口 12345// 聚合接口i...
单件模式
基本概念单件模式:一种创建型设计模式,确保一个类在系统中只有一个实例,并提供全局访问点。主要用于解决全局资源共享的问题,常用于需要唯一控制的场景(如配置管理、日志记录、线程池等)。 核心结构: 类自身负责创建唯一实例 提供全局访问该实例的方法 确保实例只能被创建一次 示例说明场景:设计一个全局日志记录器,确保系统中只有一个日志实例 饿汉式单例(线程安全,立即加载) 123456789101112131415161718192021// 饿汉式单例(线程安全,类加载时创建实例)public class LoggerHungry { // 1. 私有静态成员变量,类加载时立即初始化 private static final LoggerHungry instance = new LoggerHungry(); // 2. 私有构造函数,防止外部实例化 private LoggerHungry() { System.out.println("日志记录器初始化"); } ...
代理模式
基本概念代理模式:是一种结构型设计模式,为其他对象提供一种代理以控制对这个对象的访问。代理对象作为客户端和目标对象之间的中介,允许在不修改目标对象的情况下,添加额外的控制逻辑(如访问权限、延迟加载、日志记录,事务管理等)。 核心结构: 抽象主题(Subject):定义代理和真实对象的共同接口 真实主题(Real Subject):实际需要被代理的对象 代理主题(Proxy):持有真实主题的引用,控制对真实主题的访问 示例说明场景:设计一个图片加载系统,需要对大尺寸图片实现延迟加载(只有在真正需要显示时才加载实际图片),避免初始加载时消耗过多资源。 图片显示接口 1234567代码实现// 抽象主题:定义图片显示接口public interface Image { void display();} 真实主题:实际图片对象(加载大尺寸图片资源) 12345678910111213141516171819public class RealImage implements Image { private String fileName...
基本算法思想
一、分治类算法思想 分治法 (Divide and Conquer) 核心:将问题分解为子问题→递归解决→合并结果 Java示例:二分查找 12345678910public int binarySearch(int[] arr, int target) { int left = 0, right = arr.length - 1; while (left <= right) { int mid = left + (right - left) / 2; if (arr[mid] == target) return mid; else if (arr[mid] < target) left = mid + 1; else right = mid - 1; } return -1;} 场景:有序数据查询(时间复杂度: O(log n) ) 归并排序 核心:数组分半排序 → 合并有序子数组 12345678void mergeSort(int[] ar...
基本排序算法
1. 冒泡排序原理:相邻元素两两比较并交换,每轮将最大值“冒泡”到末尾。 时间复杂度:O(n²)(平均/最坏),O(n)(最优,已有序时) 1234567891011121314public static void bubbleSort(int[] arr) { for (int i = 0; i < arr.length - 1; i++) { boolean swapped = false; // 优化:无交换时提前结束 for (int j = 0; j < arr.length - i - 1; j++) { if (arr[j] > arr[j + 1]) { int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; swapped = true; ...
适配器模式和外观模式
基本概念适配器模式结构型设计模式,将一个类的接口转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作。它通过中间层(适配器)实现不同接口的转换,类似于现实中的电源适配器(如Type-C转USB接口) 核心结构: 目标接口(Target):客户端期望的接口; 适配者(``Adaptee`):需要被转换的接口,现有接口与目标接口不兼容; 适配器(Adapter):连接目标接口和适配者的中间层,实现接口转换。 两种实现方式 对象适配器(推荐):通过组合(聚合)适配者实现接口转换,符合OOP组合复用原则; 类适配器:通过继承适配者实现接口转换(Java中因单继承限制较少使用),不必重新实现整个被适配者,需要时也可覆盖被适配者的行为。 外观模式结构型设计模式,为子系统的一组接口提供了一个统一的接口。外观模式定义了一个更高级别的接口,使得子系统更容易使用。 核心结构 外观类(Facade):提供简单统一的接口,封装子系统的复杂交互。 子系统类(Subsystem Classes):实现系统的核心功能,彼此可能有复杂的交互。 客户端(Client):...
模板方法模式
基本概念模板方法模式:属于行为型设计模式,定义一个算法的骨架(模板),将算法中的某些步骤延迟到子类中实现,从而让子类在不改变算法整体结构的前提下,重新定义算法中的特定步骤。 核心结构: 抽象类(Abstract Class):定义模板方法和基本方法(抽象或具体),模板方法定义算法骨架。 具体子类(Concrete Class):实现抽象类中的抽象方法,完成算法的具体步骤。 示例说明场景:设计一个饮品制作系统,制作咖啡和茶的流程相似(煮水、泡制、倒入杯子),但泡制方式和调料添加不同。 饮品抽象类, 设计定义通用的方法和流程 12345678910111213141516171819202122232425// 抽象饮品类(模板方法模式的核心)public abstract class Beverage { // 模板方法:定义饮品制作的整体流程,用final防止子类覆盖 public final void prepareRecipe() { boilWater(); // 煮沸水(具体方法,所有饮品相同) ...
策略模式
基本概念策略模式:是一种行为型设计模式。定义一系列算法族,将每个算法封装起来,并使它们可以相互替换。策略模式让算法的变化不会影响到使用算法的客户端。 核心思想:将算法的责任和使用算法的责任分开,封装成独立的策略类,使得算法可以在不影响调用方的情况下动态切换。 核心结构 策略接口(Strategy):定义所有支持的算法的公共接口 具体策略(ConcreteStrategy):实现策略接口,封装具体算法 上下文(Context):持有策略接口的引用,负责调用策略算法 示例说明场景:设计一个电商平台的促销系统,需要支持多种折扣计算策略(如固定金额折扣、百分比折扣、满减折扣),并且允许后续灵活添加新的折扣策略。 设计策略顶层接口 12345678910// 折扣策略接口public interface DiscountStrategy { // 计算折扣后的价格 double calculate(double originalPrice); // 获取策略描述 String getDescription();} 固定金额折扣策...

