外观
设计模式
设计模式就是总结常用的套路 形成一种解决方案
缺点 大多都依赖于抽象 (AOP能解决这个问题!不破坏封装的前提下扩展)
| 设计原则名称 | 定 义 | 使用频率 |
| 单一职责 SRP Single Responsibility Principle | 一个类只负责一个功能领域中的相应职责 | ★★★★☆ |
| 开闭原则 OCP Open-Closed Proinciple | 软件实体对应扩展开放,对修改关闭 | ★★★★★ |
| 里氏代替原则 LSP Liskov Substitution Principle | 所有引用基类对象的地方能够透明地使用其子类的对象 | ★★★★★ |
| 依赖倒置原则 DIP Dependence Inversion Principle | 抽象不应该依赖细节,细节应该依赖抽象 | ★★★★★ |
| 接口隔离原则 ISP Interface Segregation Principle | 使用多个专门的接口,而不是用单一的总接口 | ★★☆☆☆ |
| 合成复用原则 CRP Composite Reuse Principle | 尽量使用对象组合,而不是继承来达到服用的目的 | ★★★★☆ |
| 迪米特法则 LoD Law of Demeter | 一个软件实体应当尽可能少与其他实体发生互相作用 | ★★★☆☆ |
三大类型
创建型 (关注对象的创建)
- 单例模式 (数据库连接,线程池,配置文件对象,IOC容器)
- 私有化构造函数,抛出创建对象的方法(防止被人实例创建对象)
- 1.通过构造函数+双判断锁创建
- 双判断锁,提升性能 在对象初始化之前判断多线程并发的锁少等待
- 2.使用静态构造函数构造(静态构造函数只会被创建一次)
- 3.直接创建静态字段 实例 (先静态字段在创建静态构造函数)
- 1.通过构造函数+双判断锁创建
- 私有化构造函数,抛出创建对象的方法(防止被人实例创建对象)
- 原型模式(快速获得对象,对象之间又不相互影响)
- 创建对象时克隆对象 可以在内存中开辟(克隆)新的内存 但是也只会创建一次
对象.MemberwiseClone()
- 创建对象时克隆对象 可以在内存中开辟(克隆)新的内存 但是也只会创建一次
- 三大工程(转移对象的创建)
- 建造者(复杂的工厂)
- 单例模式 (数据库连接,线程池,配置文件对象,IOC容器)
结构性 (关注类与类的关系)
适配器 (可以参与 扩展业务 没有什么是包一层不能解决的,如果有那就再包一层)
- 类适配器:比如通过中间类 继承 改变约束 实现(继承)
- 对象适配器:通过内置对象达到适配(组合)
- 组合优于继承:继承是强侵入性(会有多余的东西)。灵活性(组合依赖抽象,继承依赖细节)
代理模式(不允许参与业务)
- 也是包一层 把对象代理一下抛出来。 AOP!!
- 可以用于业务和通用逻辑分离(日志、异常、缓存、权限)
- 可以代理成单例 将类的对象 加上static静态
- 也是包一层 把对象代理一下抛出来。 AOP!!
行为性 (关注对象与行为的关系)
- 责任链模式
- 把对象的行为在最上层全部完成 )(流程审批、工资结算)
- 责任链模式
图片

