Android 架构的理解昨天看了Android框架模式(1)-MVP入门,感觉理解起来有点困难,我就重新把java回调重新理解了一遍,并写了一篇博客,有需要的朋友可以看一看,java回调机制,下面我再来按照我的理解来写mvp架构是怎么样的。
其实MVP就是一个变种的MVC架构,把activity和前端的xml文件,一起当成了View层,把获取数据封装成对象,当做Model层,把从Model层获取数据交给View层,当成了Presenter层。
解决的问题就是把原来什么代码都往activity写的混乱不清的框架理顺,按照三层架构的思想,结合Android本身的特点,搞出了一个MVP框架。
结合我的上篇博客,java回调机制,我们可以把作业理解为View,把圆圆小姐姐理解为Model,把我理解为Presenter,从Model层获取数据显示到View层就是要解决的问题,就是CallBack接口。
不知从什么时候开始,写代码就先写接口了,理顺思路之后,先写一堆接口。
先写CallBack
/**
* Created by chensc on 2018/1/5.
*/
public interface ICallBack {
void onResult(String data);
}
再写三层的接口
/**
* Created by chensc on 2018/1/4.
*/
public interface IView {
void setData(String data);
}
/**
* Created by chensc on 2018/1/4.
*/
public interface IModel {
void getData(ICallBack callback);
}
/**
* Created by chensc on 2018/1/4.
*/
public interface IPresenter {
void onCreate();
void performOnClick();
}
然后就是三个三层接口的实现类,CallBack由“我”来实现,也就是用
Presenter实现CallBack接口,被“圆圆小姐姐调用”,也就是Model调用,由圆圆小姐姐打电话回来后,我来完成作业。
public class MainActivity extends AppCompatActivity implements IView {
private TextView tvHello;
@Override
public void setData(final String data) {
MainActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
tvHello.setText(data);
}
});
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvHello = (TextView) findViewById(R.id.hello);
Button btn= (Button) findViewById(R.id.btn);
final Presenter presenter=new Presenter(this);
presenter.onCreate();
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
presenter.performOnClick();
}
});
}
}
/**
* Created by chensc on 2018/1/4.
*/
public class Model implements IModel {
@Override
public void getData(final ICallBack callback) {
new Thread(new Runnable() {
@Override
public void run() {
callback.onResult("第一个回调函数");
}
}).start();
}
}
/**
* Created by chensc on 2018/1/4.
*/
public class Presenter implements IPresenter,ICallBack {
private IView tview;
private IModel tModel;
public Presenter(IView tview){
this.tview=tview;
tModel=new Model();
}
@Override
public void onCreate() {
}
@Override
public void performOnClick() {
tModel.getData(this);
}
@Override
public void onResult(String data) {
tview.setData(data);
}
}
最后再把所有代码上传一下。