设计模式(Design pattern)是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。
设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。
使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。
项目中合理地运用设计模式可以完美地解决很多问题,每种模式在现实中都有相应的原理来与之对应,每种模式都描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是设计模式能被广泛应用的原因。
### 六大原则
1. 开闭原则(Open Close Principle)
对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。简言之,是为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类。
2. 里氏代换原则(Liskov Substitution Principle)
里氏代换原则(Liskov Substitution Principle, LSP)中说,任何基类可以出现的地方,子类一定可以出现。LSP 是继承复用的基石,只有当派生类可以替换掉基类,且软件单位的功能不受到影响时,基类才能真正被复用,而派生类也能够在基类的基础上增加新的行为。里氏代换原则是对开闭原则的补充。实现开闭原则的关键步骤就是抽象化,而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。
3. 依赖倒转原则(Dependence Inversion Principle)
这个原则是开闭原则的基础,具体内容:针对接口编程,依赖于抽象而不依赖于具体。
4. 接口隔离原则(Interface Segregation Principle)
使用多个隔离的接口,比使用单个接口要好。降低类之间的耦合度。它强调降低依赖,降低耦合。
5. 迪米特法则,又称最少知道原则(Demeter Principle)
一个实体应当尽量少地与其他实体之间发生相互作用,使得系统功能模块相对独立。
6. 合成复用原则(Composite Reuse Principle)
尽量使用合成/聚合的方式,而不是使用继承。
相关书籍推荐:
《 Design Patterns - Elements of Reusable Object-Oriented Software》
《设计模式:可复用面向对象软件的基础》
- 概述说明
- 数据结构
- 数组
- 栈
- 队列
- 链表
- 树
- 堆
- 图
- 常用算法
- 排序算法
- 选择排序
- 冒泡排序
- 插入排序
- 快速排序
- 归并排序
- 希尔排序
- 堆排序
- 计数排序
- 基数排序
- 二分查找
- 贪心算法
- 回溯算法
- 剪枝算法
- 分支限界法
- 动态规划
- 设计模式
- 工厂模式
- 抽象工厂模式
- 单例模式
- 建造者模式
- 原型模式
- 适配器模式
- 桥接模式
- 过滤器模式
- 组合模式
- 装饰器模式
- 外观模式
- 享元模式
- 代理模式
- 责任链模式
- 命令模式
- 解释器模式
- 迭代器模式
- 中介者模式
- 备忘录模式
- 观察者模式
- 状态模式
- 空对象模式
- 策略模式
- 模板模式
- 访问者模式
- 并发
- 多线程
- 线程安全
- 一致性、事务
- 锁
- 操作系统
- 计算机原理
- CPU
- 进程
- 线程
- 协程
- Linux
- 运维
- 常规监控
- 统计分析
- 自动化运维
- 测试
- 文档管理
- 日志管理
- 中间件
- Web Server
- Nginx
- Apache
- Tomcat
- 缓存
- 消息队列
- 网络协议
- 协议
- OSI 七层协议
- TCP/IP
- HTTP
- HTTP2.0
- HTTPS
- 网络模型
- Epoll
- kqueue
- 数据库
- 基础理论
- MySQL
- NoSQL
- 搜索引擎
- Elasticsearch
- sphinx
- Lucene
- 性能
- 性能优化方法论
- 容量评估
- CDN 网络
- 连接池
- 性能调优
- 安全
- web 安全
- XSS
- CSRF
- SQL 注入
- 脚本注入
- 漏洞扫描工具
- 验证码
- DDoS 防范
- 用户隐私信息保护
- 加密解密
- 对称加密
- 哈希算法
- 非对称加密
- 服务器安全
- 数据安全
- 网络隔离
- 授权、认证
- RBAC
- OAuth2.0
- 单点登录(SSO)
- JWT
- 开源框架
- 开源协议
- 日志框架
- ORM
- PHP开源框架
- 分布式集群
- 扩展性设计
- 稳定性高可用
- 数据库扩展
- 分布式一致
- 分布式文件系统
- 开发模式
- DDD(Domain-driven Design - 领域驱动设计)
- Actor 模式
- 响应式编程
- DODAF2.0
- Serverless
- Service Mesh
- 项目管理
- 架构评审
- 重构
- 代码规范
- 代码 Review
- 看板管理
- 敏捷开发
- 极限编程
- PDCA 循环质量管理
- FMEA管理模式
- 资讯
- 行业资讯
- 公众号列表
- 博客
- 综合门户、社区
- 技术资源
- 开源资源
- 手册、文档、教程
- 在线课堂
- 代码托管
- 云服务商