使用位运算进行状态管理

在稍微复杂的项目中,经常会遇到需要对当前业务场景进行状态判断的需求,并且这里的状态可能是多种状态组合的方式,可能只一种状态,也可能是多种状态共存。这里就可以借助位运算来解决,用一个整型数值上不同二进制位上的0、1数值来表示不同的状态。这样做既可以避免使用多个状态flag时重复if else逻辑判断,也有利于并发场景下状态更新和判断。在很多时候可以起到事半功倍的效果。这里就简单介绍如何进行状态设计和状态判断。

装饰器模式

装饰器模式的经典应用就是在IO类库的设计上,如下面的用例所示,实现对文件的读取功能,可以选择使用FileInputStream类也可以使用BufferedInputStream嵌套FileInputStream的方式来完成,在具体API的使用上都可以使用read(bytes)的方式。

如何排查flutter性能问题

Flutter官方提供了Flutter DevTools和一些IDE Flutter plugin来辅助开发者进行性能评测,除了这些工具以外,还可以借助Dart和skia引擎提供的工具进行性能分析和调试。这里简单介绍下,Dart的Observatory和Skp Debugger的使用。

JDK ServiceLoader加载优化

本文记录在启动优化项目中解决ServiceLoader加载长耗时问题的方案,介绍了JDK ServiceLoader在安卓平台中会带来哪些问题,方案执行过程中遇到的问题和相应的思考。特别是在一个负责的业务系统中,如何选择技改方案,保证方案的顺利落地。

访问者模式

在实际工作中经常用到访问者模式,是比较常见的设计模式,本文主要通过以下几个方面来学习访问者模式:

  1. 什么是访问者模式,访问者模式想要解决的问题是什么?
  2. 访问者模式的经典应用有哪些?

代理模式

其实在日常生活中我们经常和代理模式打交道,比如当我们需要预定酒店时,我们(使用方)通常选择类似携程这样的平台来进行酒店和机票的预定,这里携程(代理)就代理了和酒店(服务提供方)之间的预订流程,使用方通过代理实现了和真实服务提供者之间的操作,那么为什么会使用代理而不是直接和服务提供方进行业务操作呢?可以通过以下两方面来考量:

  1. 代理提高了扩展性。以订酒店为例,乘客可以通过代理类(携程)调用不同类型的服务(不同酒店)实现。
  2. 代理降低了替换成本。实现了代理类提供的服务和实际业务服务的解耦,降低了服务替换的成本。还是以订酒店为例,让用户只需要关注到订酒店这件事情,和订酒店无关的其他事情都由代理商来做了。

责任链模式

说到责任链模式一定会想到各种拦截器,在很多框架中都有拦截器的使用,如常见的okhttp中的请求处理拦截器,路由框架中的路由拦截器,作为框架的使用方你可能已经对拦截器司空见惯,但是不可否认的是一个好的设计经常会有让人有眼前一亮的感觉。本文尝试总结一下在安卓框架和源码中,责任链模式的使用场景和设计方法。