每一次学习就是成长,每一次成长将会拥有更美好的未来。
不学习的开发者不是一名合格的程序员,终将面临的是被淘汰。
目前二次开发的项目有用到MVP模式,我也很好奇MVP模式到底好在哪里!个人目前所知道的android的设计模式有MVC、MVP、MVVM以及Clean,本章博客我只是初步学习MVP设计模式和记录下来,作为以后开发以及拓展自己的知识领域。
1、首先新建各层的基类接口
(1)新建Model层的基类接口
/** * Created by GuoMeng on 2017/3/13. * Description Model:用于数据的增删改查等,也包括一些数据对象 */ public interface BaseModel { // 并实现函数回调 void getData(BaseCallBack callBack); }(2)新建View层的基类接口
/** * Created by GuoMeng on 2017/3/13. * Description View:用于界面的显示与用户操作的接收,在Android里面View通常就是Activity,Fragment。 */ public interface BaseView { void setData(String data); }
(3)新建Presenter层的基类接口
/** * Created by GuoMeng on 2017/3/13. * Description Presenter:是View跟Model的“中间人”,接收View的请求后,从Model获取数据交给View。 */ public interface BasePresenter { void onCreate(); void performOnClick(); }(4)以及一个回调接口
/** * Created by GuoMeng on 2017/3/13. * Description Model层通知View的回调 */ public interface BaseCallBack { void onResult(String data); }2、继承及实现
(1)Model层
/** * Created by GuoMeng on 2017/3/13. * Description */ public class Model implements BaseModel{ @Override public void getData(BaseCallBack callBack) { // TODO: 2017/3/13 可执行耗时操作 callBack.onResult("我在测试=="); } }(2)Presenter层
/** * Created by GuoMeng on 2017/3/13. * Description */ public class Presenter implements BasePresenter{ private BaseView baseView; private BaseModel model; public Presenter(BaseView baseView) { this.baseView = baseView; } @Override public void onCreate() { // 接口不能直接实例化,通过非抽象类得到实例 model = new Model(); } @Override public void performOnClick() { model.getData(new BaseCallBack() { @Override public void onResult(String data) { baseView.setData(data + "拼接则完成数据回调"); } }); } }(3)实现View,布局文件就不贴了,看代码就可知道了
public class MainActivity extends Activity implements BaseView{ private TextView tvMessage; private Button btnSend; private BasePresenter basePresenter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initWidget(); initData(); initListener(); } private void initWidget () { tvMessage = (TextView) findViewById(R.id.tv_message); btnSend = (Button) findViewById(R.id.btn_sent); } private void initData() { basePresenter = new Presenter(this); basePresenter.onCreate(); } private void initListener() { btnSend.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { basePresenter.performOnClick(); } }); } @Override public void setData(String data) { tvMessage.setText(data); } }3、上面只是初步的学习MVP设计模式,有些博客的进阶文章会提到修改回调接口的位置、网络请求的位置会更好,这些知识有待学习,自己也会更新博客