消息队列高手课
要想使用网络框架的 API 来传输结构化的数据,必须得先实现结构化的数据与字节流之间的双向转换。这种将结构化数据转换成字节流的过程,我们称为序列化,反过来转换,就是反序列化。
- 序列化的用途除了用于在网络上传输数据以外,另外的一个重要用途是,将结构化数据保存在文件中
选择序列化实现需要权衡的几个因素:
- 序列化后的数据最好是易于人类阅读的;
- 实现的复杂度是否足够低;
- 序列化和反序列化的速度越快越好;
- 序列化后的信息密度越大越好,也就是说,同样的一个结构化数据,序列化之后占用的存储空间越小越好;
大多数情况下,易于阅读和信息密度是矛盾的,实现的复杂度和性能也是互相矛盾的。所以,我们需要根据所实现的业务,来选择合适的序列化实现。
后端技术面试 38 讲
开闭原则说:软件实体(模块、类、函数等等)应该对扩展是开放的,对修改是关闭的。
对修改是关闭的,意味着:
- 当对软件实体进行扩展的时候,不需要改动当前的软件实体
- 不需要修改代码
- 对于已经完成的类文件不需要重新编辑
- 对于已经编译打包好的模块,不需要再重新编译
当我们在代码中看到 else 或者 switch/case 关键字的时候,基本可以判断违反开闭原则了。
设计的优劣需要放入需求变更的场景中考察。当需求变更时发现当前设计的腐坏,就要及时进行重构,保持设计的强壮和代码的干净。
策略模式
策略模式是一种行为模式,多个策略实现同一个策略接口,编程的时候 client 程序依赖策略接口,运行期根据不同上下文向 client 程序传入不同的策略实现。
适配器模式
适配器模式是一种结构模式,用于将两个不匹配的接口适配起来,使其能够正常工作。
观察者模式
观察者模式是一种行为模式,解决一对多的对象依赖关系,将被观察者对象的行为通知到多个观察者,也就是监听者对象。
模板方法模式
所谓模板方法模式,就是在父类中用抽象方法定义计算的骨架和过程,而抽象方法的实现则留在子类中。
|
|
通过模板方法模式,每个子类可以定义自己在 press
执行时的状态操作,无需修改 Button
类,实现了开闭原则。
大部分的设计模式都是用来解决扩展的灵活性问题的。
开闭原则可以说是软件设计原则的原则,是软件设计的核心原则,其他的设计原则更偏向技术性,具有技术性的指导意义,而开闭原则是方向性的,在软件设计的过程中,应该时刻以开闭原则指导、审视自己的设计:当需求变更的时候,现在的设计能否不修改代码就可以实现功能的扩展?如果不是,那么就应该进一步使用其他的设计原则和设计模式去重新设计。