# DesignPattern **Repository Path**: kk_lgy/design-pattern ## Basic Information - **Project Name**: DesignPattern - **Description**: java常用设计模式 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-03-11 - **Last Updated**: 2026-01-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Java 设计模式演示项目 本项目通过实际代码示例展示常用的Java设计模式,每个模式都包含详细的说明文档和可运行的测试用例,帮助理解设计模式的应用场景、优缺点和最佳实践。 ## 📚 项目结构 ``` DesignPattern/ ├── adapter/ # 适配器模式(结构型) ├── factory/ # 工厂模式(创建型) ├── singleton/ # 单例模式(创建型) ├── builder/ # 建造者模式(创建型) ├── proxy/ # 代理模式(结构型) ├── decorator/ # 装饰器模式(结构型) ├── strategy/ # 策略模式(行为型) ├── observer/ # 观察者模式(行为型) ├── chain/ # 责任链模式(行为型) └── template/ # 模板方法模式(行为型) ``` ## 🎯 设计模式分类 ### 创建型模式(Creational Patterns) 创建型模式关注对象的创建机制,试图用合适的方式创建对象。 | 模式 | 描述 | 应用场景 | |------|------|----------| | **工厂模式** | 定义一个创建对象的接口,让子类决定实例化哪个类 | 数据库连接、日志记录器 | | **单例模式** | 确保一个类只有一个实例,并提供全局访问点 | 配置管理、连接池、缓存 | | **建造者模式** | 将复杂对象的构建与表示分离 | 复杂对象构建、StringBuilder | ### 结构型模式(Structural Patterns) 结构型模式关注类和对象的组合,通过继承和组合来组合接口或实现。 | 模式 | 描述 | 应用场景 | |------|------|----------| | **适配器模式** | 将一个类的接口转换成客户希望的另一个接口 | 接口适配、旧系统集成 | | **代理模式** | 为其他对象提供一种代理以控制对这个对象的访问 | 延迟加载、权限控制、日志 | | **装饰器模式** | 动态地给对象添加额外的职责 | IO流、咖啡加配料 | ### 行为型模式(Behavioral Patterns) 行为型模式关注对象之间的通信和职责分配。 | 模式 | 描述 | 应用场景 | |------|------|----------| | **策略模式** | 定义一系列算法,让它们可以相互替换 | 支付方式、排序算法 | | **观察者模式** | 定义对象间一对多的依赖关系 | 事件监听、消息订阅 | | **责任链模式** | 为解除请求的发送者和接收者之间耦合 | 审批流程、过滤器链 | | **模板方法模式** | 定义算法骨架,将具体步骤延迟到子类 | 数据处理流程、框架扩展 | ## 🚀 快速开始 ### 环境要求 - JDK 11+ - Maven 3.6+ ### 编译项目 ```bash # 克隆项目 git clone # 进入项目目录 cd DesignPattern # 编译所有模块 mvn clean compile ``` ### 运行测试 ```bash # 运行所有测试 mvn test # 运行特定模块的测试 cd factory mvn test ``` ## 📖 学习指南 ### 推荐学习顺序 #### 1. 创建型模式(先学习对象创建) 1. **单例模式** - 最简单,理解单例概念 2. **工厂模式** - 掌握对象创建的封装 3. **建造者模式** - 学习复杂对象的构建 #### 2. 结构型模式(再学习对象组合) 1. **代理模式** - 理解代理的概念 2. **装饰器模式** - 学习动态扩展功能 3. **适配器模式** - 掌握接口适配技巧 #### 3. 行为型模式(最后学习对象交互) 1. **策略模式** - 最实用,替代if-else 2. **观察者模式** - 理解发布-订阅机制 3. **模板方法模式** - 掌握算法框架设计 4. **责任链模式** - 学习请求处理链 ### 每个模式的学习步骤 1. 📖 阅读模块下的 `README.md` 了解模式定义和使用场景 2. 💻 查看 `src/main/java` 下的代码实现 3. 🧪 运行 `src/test/java` 下的测试用例 4. 🤔 思考在实际项目中的应用场景 5. ✍️ 尝试修改代码,加深理解 ## 💡 设计原则 所有设计模式都基于以下设计原则: 1. **单一职责原则(SRP)** - 一个类应该只有一个引起它变化的原因 2. **开闭原则(OCP)** - 对扩展开放,对修改关闭 3. **里氏替换原则(LSP)** - 子类必须能够替换其基类 4. **依赖倒置原则(DIP)** - 依赖于抽象,不依赖于具体实现 5. **接口隔离原则(ISP)** - 使用多个专门的接口比使用单一的总接口要好 6. **迪米特法则(LoD)** - 一个对象应当对其他对象有尽可能少的了解 ## 📝 各模式对比 ### 工厂模式 vs 建造者模式 - **工厂模式**:关注"创建什么",适合创建简单对象 - **建造者模式**:关注"如何创建",适合创建复杂对象 ### 代理模式 vs 装饰器模式 - **代理模式**:控制访问,不改变接口 - **装饰器模式**:增强功能,保持接口不变 ### 策略模式 vs 状态模式 - **策略模式**:算法可以自由切换,由客户端选择 - **状态模式**:状态自动切换,客户端不感知 ## 🌟 实际应用示例 ### Spring框架中的设计模式 - **单例模式**:Spring Bean 默认是单例 - **工厂模式**:BeanFactory - **代理模式**:AOP 实现 - **模板方法模式**:JdbcTemplate - **观察者模式**:Spring 事件机制 ### JDK中的设计模式 - **单例模式**:Runtime - **工厂模式**:Calendar.getInstance() - **装饰器模式**:Java I/O 流 - **代理模式**:动态代理 - **观察者模式**:Event Listener ## 📚 参考资料 - 《设计模式:可复用面向对象软件的基础》(GoF) - 《Head First 设计模式》 - [菜鸟教程 - 设计模式](https://www.runoob.com/design-pattern) ## 🤝 贡献 欢迎提交 Issue 和 Pull Request! ## 📄 许可证 MIT License