Skip to content

Fresco中的设计模式

MicroBread edited this page Dec 12, 2017 · 8 revisions

Builder

通常名为XXXBuilder类,用于复杂的对象构建,可以将初始化过程中的一些判断封装起来,并为未提供的属性设置默认值等,通常只需要一句.build()即可方便地构建对象。

Supplier

继承Supplier接口的类,它将一类对象包装起来。使用.get()的时候会根据现有条件提供新对象(如根据Uri构建新的DataSource)。接口原型:

public interface Supplier<T> {
  T get();
}

Producer&&Consumer

异步信息传递实现的工具。Producer会在内容生产完成后通知指定Consumer。Producer原型:

public interface Producer<T> {
      /**
       * 在数据加载完成后向Consumer发送数据
       * @param consumer 目标consumer
       * @param context 含有唯一标识、ImageRequest等内容
       */
    void produceResults(Consumer<T> consumer, ProducerContext context);
}

其中泛型为生产内容的类型。Consumer原型:

public interface Consumer<T> {

  /**
   * 当Producer产生新数据时调用
   *
   * @param newResult
   * @param isLast 若为true,返回的是最终结果
   */
  void onNewResult(T newResult, boolean isLast);

  /**
   * 当Producer由于某种Throwable而停止产生数据时调用
   *
   * @param t
   */
  void onFailure(Throwable t);

  /**
   * 当Producer主动取消提供数据时调用
   */
  void onCancellation();

  /**
   * 当更新加载进度时调用
   *
   * @param progress [0, 1]内的浮点数
   */
  void onProgressUpdate(float progress);
}
Clone this wiki locally