这不是本篇的最终样式,这是我对于设计模式系列博客笔记的开端,也许有幸能有人从头看到尾,欣赏一篇美文,一个大知识点有少到多,知至最终积累完毕的过程,一步步的渐变,这就是写大块知识点,系列文章我认为最好的方式。
不积跬步,无以至千里,不积小流,无以成江海!很多成块知识点不好学,那么我们就一步一步的啃,学通一点写一点,很快这个系列文章就能简单成型了,然后我们再去实践,积累经验和自己的看法,回来修改自己的文章。平时看到相关好文,也有个地方记录,不至于想看是找不到不是。实践证明,微信的收藏,简述的喜欢都是不靠谱的,不经历筛选,整理的记录都是耍流氓,都是骗自己。
美人如玉
身轻体柔
代码之路如美人
唯有套路得人心
设计模式资料暂时积累
是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。说白了,就是一些开发的套路,用于解决某一些特定场景的思想,然后套路大家都懂的.......
动态代理
动态代理之前我写完总是报错,这里贴一下实现
public class BasePresenter<V extends BaseView, M extends BaseModel> {
private V mView;
private M mModel;
/**
* 绑定View
*
* @param view
*/
public void attach(final V view) {
//动态代理
mView = (V) Proxy.newProxyInstance(view.getClass().getClassLoader(), view.getClass().getInterfaces(), new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
//在View层显示数据之前用户可能退出了View层的页面,会在Activity的onDestroy()方法中会把mView置为null
//由于View层都是接口,这里采用了动态代理,如果在View层显示数据之前用户可能退出了View层的页面,返回null的话,onSuccess()方法不会执行
if (mView == null) {
return null;
}
//每次调用View层接口的方法,都会执行这里
return method.invoke(view, args);
}
});
//动态创建Model?怎么创建创建???用反射创建
Type[] params = ((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments();
try {
//最好是判断下类型
mModel = (M) ((Class) params[1]).newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
用于给外面调用者使用的叫:上层接口。典型的比如 handle ,我们有 handle 就可以实现线程切换,简化使用,提升使用体验。