提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
面向对象设计原则和前人总结出来的设计模式是软件工程中非常重要的概念思想,主要为我们日常的开发中提供了一套完整的开发思想,帮助我们在日常开发中构建更加灵活、可维护和可扩展的系统。
一、设计原则
设计原则 | 解释 | 实际使用案例 |
---|---|---|
单一指责原则 | 一个类应该只有一个引起它变化的原因(即一个类只负责一个职责) | Spring框架中的工厂模式 |
开闭原则 | 软件实体(类、模块、函数)应对扩展开放,对修改关闭 | 常见的如策略模式的实现 |
里氏替换原则 | 子类必须能够替换其父类,且不会破坏程序正确性 | 多态思想向下转型的使用 |
接口隔离原则 | 建立单一接口,接口中避免承担过多的责任(方法) | Spring中抽象工厂的实现 |
依赖倒置原则 | 细节依赖抽象,下层依赖上层 | 如模版模式在:抽象类中定义算法框架,具体步骤由子类实现 |
二、设计模式分类
总结不同设计模式的分类,后面补充对应案例及文章去理解设计模式的使用(文章地址同步更新)
1.创建型模式
解决对象创建过程中的复杂性问题,提供灵活的实例化机制性。
1.将对象的创建与使用分离,避免硬编码依赖。显著使用时减少类创建 new 的使用
2.通过抽象化实例化过程,支持动态配置对象类型。
模式名称 | 解释 | 案例 | 文章地址 |
---|---|---|---|
工厂方法 | 定义一个创建对象的接口,由子类决定实例化哪个类 ) | 支付方式工厂(支付宝/微信) | 链接: 工厂模式 |
抽象工厂 | 创建一组相关或依赖的对象家族,无需指定具体类 | 跨平台UI组件库(Windows/Mac) | |
单例 | 确保一个类只有一个实例,并提供全局访问点 | 数据库连接池、日志管理器 | |
建造者 | 分步骤构建复杂对象,允许不同表示形式 | 构造SQL查询、定制化套餐订单 | |
原型 | 通过复制现有对象来创建新对象,避免重复初始化 | 游戏中的敌人克隆、配置模板复制 |
2.结构型模式
通过组合类或对象形成更大的结构,解决系统模块间的组织问题。
1.关注类与对象之间的静态关系(继承、组合、代理等)。
2.提升系统的可扩展性和复用性。
模式名称 | 解释 | 案例 | 文章地址 |
---|---|---|---|
适配器 | 将不兼容的接口转换为客户端期望的接口 | 旧系统接口适配新API(如XML→JSON) | |
桥接 | 将抽象与实现分离,使两者可独立变化 | 不同图形渲染引擎(OpenGL/Vulkan) | |
组合 | 以树形结构处理部分-整体关系,统一对待单个对象和组合对象 | 文件系统(文件/文件夹统一操作) | |
装饰器 | 动态地为对象添加额外职责,避免子类膨胀 | Java I/O流(BufferedInputStream) | |
代理 | 为其他对象提供一种代理以控制对这个对象的访问 | 远程服务代理、懒加载图片 | |
外观 | 为子系统提供统一的简化接口,降低复杂度 | 电商下单接口整合库存、支付、物流 | |
享元 | 共享大量细粒度对象,减少内存消耗 | 字符渲染池、游戏中的粒子系统 |
3.行为型模式
优化对象之间的通信和职责分配,提升系统运行的灵活性。
1.关注对象间的交互和算法封装。
2.解耦发送者和接收者,避免紧耦合。
模式名称 | 解释 | 案例 | 文章地址 |
---|---|---|---|
策略 | 定义一系列算法并使其可互换,隔离算法使用与实现 | 排序算法(快速排序/冒泡排序) | 链接: 策略模式 |
观察者 | 定义对象间的一对多依赖,当一个对象状态改变时自动通知依赖对象 | 事件监听、消息推送系统 | |
命令 | 将请求封装为对象,支持请求的排队、日志、撤销等操作 | 文本编辑器中的撤销/重做功能 | |
状态 | 允许对象在内部状态改变时改变其行为 | 订单状态流转(待支付/已发货) | |
责任链 | 将请求的发送者和接收者解耦,使多个对象都有机会处理请求 | 审批流程(经理→总监→CEO) | |
模板方法 | 定义算法骨架,将某些步骤延迟到子类实现 | 咖啡制作流程(煮水→加料→冲泡) | |
迭代器 | 提供一种方法顺序访问聚合对象的元素,而无需暴露底层表示 | Java中的 Iterator 接口 | |
中介者 | 通过中介对象封装一系列对象交互,减少对象间直接引用 | 聊天室(用户通过服务器中转消息) | |
备忘录 | 捕获对象内部状态并在需要时恢复,支持撤销操作 | 游戏存档、事务回滚 | |
访问者 | 将算法与对象结构分离,便于新增操作而无需修改结构 | 文件格式导出(PDF/XML转换器) | |
解释器 | 定义语言的文法表示,并解释执行 | SQL解析、正则表达式引擎 |
总结
设计原则是“道”:提供指导思想,塑造代码哲学。
设计模式是“术”:提供具体工具,解决特定问题。
二者结合能写出高内聚、低耦合、易扩展的代码。