观察者模式

观察者模式 概念 一个动作的发生可以让其他观察者知道 应用 jdk的observer和 Observable 观察者(observer)注册(addObserver())在被观察者(observable)上,通过方法notifyObservers来执行每个观察者的update方法,有意思的是,为了防止在循环执行每个观察者的update方法时,可能存在删除或者添加观察者,引起结果的不正确,执行notifyObservers方法时,都会先生成一个观察者集合快照,并给他加上了锁,使用快照来循环,就不会出现意外。 ...

August 4, 2022 · 1 min

设计模式大纲

设计原则与思想 八大设计原则 solid原则 单一职责原则 Single Responsibility Principle 开闭原则 Open Closed Principle 里氏替换原则 Liskov Substitution Principle 接口隔离原则 Interface Segregation Principle 依赖反转原则 Dependency Inversion Principle 设计模式(需要从实现方式,使用场景两方面看) 创建型 单例模式 使用场景 重点对资源的共享,避免了资源的重复创建 实现方式 饿汉式 懒汉式 双重检测 工厂模式 实现方式 简单工厂 方法工厂 抽象工厂 使用场景 封装创建过程,方便创建对象 建造者模式 实现方式 创建builder,使用builder来校验参数,创建对象 使用场景 一般用来创建同一类型的复杂对象(比如构造参数复杂),或者不想对外暴露set方法 原型模式 实现方式 浅拷贝 深拷贝 使用场景 当创建对象的成本比较大,需要的对象和已知对象的差别不大,可以拷贝已知对象来创建新的对象。 结构型-对象与对象之间组合成新的结构 代理模式 实现方式 静态代理 动态代理 使用场景 利用已知对象对它增强,mybatis的拦截器,spring的AOP 桥接模式 概念 一个类存在两个(或多个)独立变化的维度,我们通过组合的方式,让这两个(或多个)维度可以独立进行扩展。 装饰者模式 概念 装饰器模式主要解决继承关系过于复杂的问题,通过组合来替代继承。它主要的作用是给原始类添加增强功能。 特点 可以对原始类嵌套使用多个装饰器 适配器模式 实现方式 类适配器 对象适配器 使用场景 是用来做适配,它将不兼容的接口转换为可兼容的接口 门面模式 概念 门面模式为子系统提供一组统一的接口,定义一组高层接口让子系统更易用。 组合模式 享元模式 顾名思义就是被共享的单元。享元模式的意图是复用对象,节省内存,前提是享元对象是不可变对象 行为型 观察者模式 实现方式 发布-订阅型 1:N 生产-消费型 N:N 使用场景 解耦数据的产生和数据的消费 模板模式 实现方式 定义好模板框架,暴露接口给子类实现 使用场景 主要是用来扩展和复用代码 策略模式 实现方式 可以使用工厂类来创建策略,动态选择策略(if else,或者反射) 使用场景 将对象的创建和使用解耦 责任链模式 实现方式 将流程拆分成一个一个的步骤,交给handler处理 使用场景 适合业务复杂,多变的场景 状态模式 实现方式 分支逻辑法 查表法 态模式 使用场景 游戏人物,审批流场景 迭代模式 实现方式 创建迭代器,遍历数据,不影响集合对象 使用场景 遍历数据 访问者模式 备忘录模式 使用场景 数据备份 命令模式 解释器模式 中介模式

August 4, 2022 · 2 min

规范与重构

规范与重构 了解重构 重构的目的:为什么要重构(why)? 重构的含义 重构是一种对软件内部结构的改善,目的是在不改变软件的可见行为的情况下,使其更易理解,修改成本更低 重构的意义 首先,重构是时刻保证代码质量的一个极其有效的手段,不至于让代码腐化到无可救药的地步。 ...

May 9, 2022 · 6 min

贫血模型与充血模型

实战一(下):如何利用基于充血模型的DDD开发一个虚拟钱包系统? 1. 什么是贫血模型?什么是充血模型? 贫血模型:只包含数据,不包含业务逻辑的类 充血模型:既包含数据,也包含业务逻辑的类 2. 为什么说基于贫血模型的传统开发模式违反 OOP? 这种贫血模型将数据与操作分离,破坏了面向对象的封装特性,是一种典型的面向过程的编程风格。 ...

May 4, 2022 · 2 min

设计原则

solid原则 单一职责原则、开闭原则、里式替换原则、接口隔离原则和依赖反转原则,依次对应 SOLID 中的 S、O、L、I、D 这 5 个英文字母。 单一职责 单一职责原则的英文是 Single Responsibility Principle,缩写为 SRP。这个原则的英文描述是这样的:A class or module should have a single reponsibility。如果我们把它翻译成中文,那就是:一个类或者模块只负责完成一个职责(或者功能)。 ...

May 4, 2022 · 12 min
总访问量 总访客数