代理模式
基本概念代理模式:是一种结构型设计模式,为其他对象提供一种代理以控制对这个对象的访问。代理对象作为客户端和目标对象之间的中介,允许在不修改目标对象的情况下,添加额外的控制逻辑(如访问权限、延迟加载、日志记录,事务管理等)。 核心结构: 抽象主题(Subject):定义代理和真实对象的共同接口 真实主题(Real Subject):实际需要被代理的对象 代理主题(Proxy):持有真实主题的引用,控制对真实主题的访问 示例说明场景:设计一个图片加载系统,需要对大尺寸图片实现延迟加载(只有在真正需要显示时才加载实际图片),避免初始加载时消耗过多资源。 图片显示接口 1234567代码实现// 抽象主题:定义图片显示接口public interface Image { void display();} 真实主题:实际图片对象(加载大尺寸图片资源) 12345678910111213141516171819public class RealImage implements Image { private String...
适配器模式和外观模式
基本概念适配器模式结构型设计模式,将一个类的接口转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作。它通过中间层(适配器)实现不同接口的转换,类似于现实中的电源适配器(如Type-C转USB接口) 核心结构: 目标接口(Target):客户端期望的接口; 适配者(``Adaptee`):需要被转换的接口,现有接口与目标接口不兼容; 适配器(Adapter):连接目标接口和适配者的中间层,实现接口转换。 两种实现方式 对象适配器(推荐):通过组合(聚合)适配者实现接口转换,符合OOP组合复用原则; 类适配器:通过继承适配者实现接口转换(Java中因单继承限制较少使用),不必重新实现整个被适配者,需要时也可覆盖被适配者的行为。 外观模式结构型设计模式,为子系统的一组接口提供了一个统一的接口。外观模式定义了一个更高级别的接口,使得子系统更容易使用。 核心结构 外观类(Facade):提供简单统一的接口,封装子系统的复杂交互。 子系统类(Subsystem...
模板方法模式
基本概念模板方法模式:属于行为型设计模式,定义一个算法的骨架(模板),将算法中的某些步骤延迟到子类中实现,从而让子类在不改变算法整体结构的前提下,重新定义算法中的特定步骤。 核心结构: 抽象类(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...
工厂模式
基本概念工厂方法:一种创建型设计模式,它定义了一个创建对象的接口(工厂方法),但将对象的实际创建工作推迟到子类中。核心思想是“定义接口,由子类决定创建哪个具体类的实例”。 核心结构 抽象工厂(creator):声明工厂方法接口,该方法返回抽象产品。 具体工厂(Concrete Creator):实现工厂方法,返回具体产品实例。 抽象产品(Product):定义产品的公共接口。 5.具体产品(Concrete Product):实现抽象产品接口的具体类。 抽象工厂:一种创建型设计模式,它能帮你创建一系列相关的对象,而无需明确指定具体的类。该模式将对象的创建和使用分离开来,使得系统更具可扩展性和可维护性。 核心结构 抽象工厂(Abstract Factory):声明创建多个产品的方法接口。 具体工厂(Concrete Factory):实现抽象工厂接口,创建具体产品族。 抽象产品(Abstract Product):定义各产品的公共接口。 具体产品(Concrete...
面向对象设计原则
面向对象 封装:明确标识出允许外部使用的所有成员函数和数据项, 私有属性或保护对象不允许无权限对象直接访问或修改; 多态:基于对象所属类的不同,外部对同一方法的调用,实际执行的逻辑不同; 继承:继承基类的方法,并做出自己的改变和拓展,封装和继承几乎都是为多态而准备的,在执行期间判断引用对象的实际类型(方法重写),根据其实际的类型调用其相应的方法; 抽象:对问题领域进行分析、设计中得出的抽象的概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象; 设计原则: 封装变化; 组合优于继承; 针对接口编程,而非针对实现编程; 为交互对象的松耦合设计而努力; 类应该对拓展开放,对修改关闭; 【依赖倒置原则】依赖于抽象,不应依赖与具体类; 只和朋友交谈【最少知识原则】,详情见外观模式; 别打电话给我。我会打电话给你; 类应该只有一个变化的原因;