Data-Mediator专题之Api篇

主要的Api

  • 1, 数据中介者工厂 DataMediatorFactory
    • 介绍: DataMediatorFactory.负责创建数据模型实现data-impl, 数据中介者DataMediator, 数据绑定相关DataBinding.
public final class DataMediatorFactory {

    //创建数据绑定,并绑定指定数据,返回该Binder
    public static <T> Binder<T> bind(Object target, T data);

   //创建数据绑定,并绑定指定数据,返回该Binder. index 用于多module的数据绑定
    public static <T> Binder<T> bind(Object target, T data, int index)''

    //创建数据绑定,并绑定指定数据,返回该Binder. index 用于多module的数据绑定
    public static <T> Binder<T> bind(Object target, T data,
                                     int index, PropertyInterceptor interceptor);

    //创建数据绑定 (为指定目标--数据绑定注解使用的类)
    public static <T> DataBinding<T> createDataBinding(T target);

    //从池子中获取数据(数据缓存用的)
    public static <T> T obtainData(Class<T> clazz);

    //根据数据模型,创建数据
    public static <T> T createData(Class<T> clazz);
 
   //根据数据模型创建数据的中介者。
    public static <T> DataMediator<T> createDataMediator(Class<T> clazz)
   
    //根据指定是数据创建数据中介者
    public static <T> DataMediator<T> createDataMediator(T t);

    //创建数据中介者。根据指定的根中介者和数据(属性链绑定的时候用的)
    public static <T> DataMediator<T> createDataMediator(DataMediator<?> root, T t);

   //根据数据中介者创建Binder
    public static <T> Binder<T> createBinder(DataMediator<T> mediator);
    
   //根据模型创建Binder
    public static <T> Binder<T> createBinder(Class<T> moduleClass);
    //根据模型数据 创建Binder
    public static <T> Binder<T> createBinder(T module);
}
复制代码
  • 2, 数据中介者 DataMediator
    • 介绍: 这个是整个框架的核心。负责连接数据模型实现和数据模型代理。
public final class DataMediator<T> {
    //获取基本的中介者
    public final BaseMediator<T> getBaseMediator(){
        return mediator;
    }

    /**
    根据收集器的标志,启动批属性回调。
     * <p> Here is a demo.
     * <pre>
     *     DataMediator{@literal <}Student{@literal >} dm = ...;
     *     dm.beginBatchedDispatches(CollectorManagerImpl.FLAGS_ALL);
     *     dm.getDataProxy().setId(xx)
     *               .setName(xxx)
     *               .setGrade(xxx)...;
     *      PropertyEventReceiver receiver = ...;
     *      dm.endBatchedDispatches(receiver);
     * </pre>
     * </p>
     * @param collectorFlags  the flags of collector. see {@linkplain CollectorManager#FLAG_SIMPLE},
     * {@linkplain CollectorManager#FLAG_LIST}, {@linkplain CollectorManager#FLAG_SPARSE_ARRAY}
     * @since 1.4.4
     */
    public void beginBatchedDispatches(int collectorFlags);
  
  //结束批属性回调并将收集的事件传递给接收者
    public void endBatchedDispatches(final @Nullable PropertyEventReceiver receiver);
  //丢弃之前开启批属性回调后接收到的事件。
    public void dropBatchedDispatches();

    //获取数据
    public final T getData();
   
   //获取数据代理
    public final T getDataProxy();

   //填充属性链(用于属性链的绑定)
    public void inflatePropertyChain(String propertyChain);

   //是否应该重新填充属性链(用于属性链的绑定)
    public boolean shouldReinflatePropertyChains();
    
    //重新填充属性链, 之前失败了后可以用此方法(用于属性链的绑定)
    public boolean reinflatePropertyChains();
   
   //获取指定数据填充的回调
    public List<DataMediatorCallback> getInflateCallbacks(Object data);

   //获取数据消费者
    public DataConsumer<? super T> getDataConsumer() ;

   //设置数据消费者
    public void setDataConsumer(DataConsumer<? super T> mConsumer);

  //获取属性拦截器.影响apply
    public PropertyInterceptor getPropertyInterceptor();

  //设置属性拦截器。影响apply
    public void setPropertyInterceptor(PropertyInterceptor interceptor);

   //获取是否相等的比较器
    public EqualsComparator getEqualsComparator() ;

   //设置是否相等的比较器
    public void setEqualsComparator(EqualsComparator comparator);

   //应用当前的属性。会被已经设置的属性拦截器影响
    public void applyProperties();

    //应用当前的属性。会被指定的属性拦截器影响
    public void applyProperties(PropertyInterceptor interceptor);

   //启动 action mode
    public ActionMode<T> startActionMode(ActionMode.Callback<T> callback);

    //=======================================================
   //添加回调
    public void addDataMediatorCallback(DataMediatorCallback<? super T> callback);
   //移除回调
    public void removeDataMediatorCallback(DataMediatorCallback<? super T> callback);
    //移除所有回调
    public void removeDataMediatorCallbacks() {
        mediator.removeCallbacks();
    }
}
复制代码
  • 3, 字段标志类FieldFlags
public final class FieldFlags {

    //标识属性是数组类型
    public static final int COMPLEX_ARRAY = 1;
    
   //标识属性是list类型
    public static final int COMPLEX_LIST = 2;

   //标识属性是sparse array类型
    public static final int COMPLEX_SPARSE_ARRAY  =  3;

    //transient标志。表示不被Serializable序列化
    public static final int FLAG_TRANSIENT = 0x00000001;

    //volatile标志
    public static final int FLAG_VOLATILE = 0x00000002;

    //内置接口 ISnapable 标志, 表示字段是否参加这个接口的方法
    public static final int FLAG_SNAP     = 0x00000004;
    //内置接口 IShareable 标志,表示字段是否参加这个接口的方法
    public static final int FLAG_SHARE    = 0x00000008;
   //内置接口 ICopyable 标志, 表示字段是否参加这个接口的方法
    public static final int FLAG_COPY     = 0x00000010;//16
   //内置接口 IResetable 标志, 表示字段是否参加这个接口的方法
    public static final int FLAG_RESET    = 0x00000020;//32

    //toString()方法标志,表示字段是否参加toString
    public static final int FLAG_TO_STRING = 0x00000040; //64

    //android parcelable接口方法标志,表示字段是否参加parcelable
    public static final int FLAG_PARCELABLE = 0x00000080; //128

    //@Expose标志。表示@Expose注解 默认 serialize = true,  deserialize = true.
    public static final int FLAG_EXPOSE_DEFAULT = 0x00000100;//256
    //@Expose标志。表示@Expose注解 serialize = false
    public static final int FLAG_EXPOSE_SERIALIZE_FALSE = 0x00000200;//512
    //@Expose标志。表示@Expose注解 deserialize = false
    public static final int FLAG_EXPOSE_DESERIALIZE_FALSE = 0x00000400;//1024


    //Gson序列化标志,标识字段是否参加Gson的序列化和反序列化。
    public static final int FLAG_GSON_PERSISTENCE         = 0x00000800;//2048
   //hashCode()方法标志,表示字段是否参加hashCode
    public static final int FLAG_HASH                     = 0x00001000;
    //equals()方法标志,表示字段是否参加equals
    public static final int FLAG_EQUALS                   = 0x00002000;
 
    /**
     * 复合标志。
     * @see #FLAG_SNAP
     * @see #FLAG_RESET
     * @see #FLAG_SHARE
     * @see #FLAG_COPY
     * @see #FLAG_PARCELABLE
     * @see #FLAG_TO_STRING
     * @see #FLAG_HASH
     * @see #FLAG_EQUALS
     * @see #FLAG_GSON_PERSISTENCE
     */
    public static final int FLAGS_ALL_SCOPES = FLAG_SNAP | FLAG_RESET | FLAG_SHARE
            | FLAG_COPY | FLAG_PARCELABLE | FLAG_TO_STRING
            | FLAG_HASH | FLAG_EQUALS | FLAG_GSON_PERSISTENCE;

    /**
     * 复合标志。
     * @see #FLAG_COPY
     * @see #FLAG_PARCELABLE
     * @see #FLAG_TO_STRING
     * @see #FLAG_GSON_PERSISTENCE
     * @since 1.0.7
     */
    public static final int FLAGS_MAIN_SCOPES = FLAG_COPY | FLAG_PARCELABLE | FLAG_TO_STRING | FLAG_GSON_PERSISTENCE;
    /**
     *复合标志
     * <pre>{@literal @}Expose(serialize = false,
     deserialize = false) </pre>
     * @see #FLAG_EXPOSE_DEFAULT
     * @see #FLAG_EXPOSE_SERIALIZE_FALSE
     * @see #FLAG_EXPOSE_DESERIALIZE_FALSE
     * @since 1.0.7
     */
    public static final int FLAGS_NO_EXPOSE = FLAG_EXPOSE_DEFAULT | FLAG_EXPOSE_SERIALIZE_FALSE | FLAG_EXPOSE_DESERIALIZE_FALSE;

    /**
     * 复合标志. which have multi flags. relative to {@linkplain #FLAGS_MAIN_SCOPES} , {@linkplain #FLAG_EQUALS}
     * add {@linkplain #FLAG_HASH}.
     * @see #FLAG_COPY
     * @see #FLAG_PARCELABLE
     * @see #FLAG_TO_STRING
     * @see #FLAG_GSON_PERSISTENCE
     * @see #FLAG_HASH
     * @see #FLAG_EQUALS
     * @since 1.1.1
     */
    public static final int FLAGS_MAIN_SCOPES_2 = FLAGS_MAIN_SCOPES | FLAG_HASH | FLAG_EQUALS;

    /**
     * 复合标志 . which have multi flags. relative to {@linkplain #FLAGS_MAIN_SCOPES}.
     * add {@linkplain #FLAG_EQUALS}. without {@linkplain #FLAG_HASH}
     * @see #FLAG_COPY
     * @see #FLAG_PARCELABLE
     * @see #FLAG_TO_STRING
     * @see #FLAG_GSON_PERSISTENCE
     * @see #FLAG_EQUALS
     * @since 1.4.4
     */
    public static final int FLAGS_MAIN_SCOPES_3 = FLAGS_MAIN_SCOPES | FLAG_EQUALS;
}

复制代码
  • 4, 属性回调 DataMediatorCallback
public abstract class DataMediatorCallback<T> {
    //属性改变时被调用
    void onPropertyValueChanged(T data, Property prop, Object oldValue, Object newValue);

    //属性应用时被调用
    void onPropertyApplied(T data, Property prop, Object value);
    
    //List属性回调,当添加元素时被调用
    void onAddPropertyValues(T data, Property prop, Object newValue, Object addedValue);

   //List属性回调,当添加元素时被调用
     void onAddPropertyValuesWithIndex(T data, Property prop,
                                             Object newValue, Object addedValue, int index);

    //List属性回调,当删除元素时被调用
    void onRemovePropertyValues(T data, Property prop, Object newValue, Object removeValue);

     //List属性回调,当元素改变时被调用
    void onPropertyItemChanged(T  data, Property prop, Object oldItem, Object newItem, int index);

    //SparseArray属性回调
    public SparseArrayPropertyCallback<T> getSparseArrayPropertyCallback();
}
复制代码
public interface SparseArrayPropertyCallback{
   //当一个映射的value改变时调用
    void onEntryValueChanged(T data , Property prop, K key, Object oldValue, Object newValue);

   //当添加一条映射时改变时调用
    void onAddEntry(T data , Property prop, K key, Object value);
    //当删除一条映射时改变时调用
    void onRemoveEntry(T data , Property prop, K key, Object value);

  //当清空SparseArray时调用
    void onClearEntries(T data, Property prop, Object entries);
    }
复制代码

想要体验最新的特性 ?

请到github/data-mediator体验。 如果觉得不错,请star支持下项目哈。

欢迎大家star, fork,contribute ,提issue. 它会越来越棒。

Thanks for reading !

技术源于分享!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值