MVP大家应该差不多都知道了,他其实是MVC的升华版,差不多是在view和model中加了一个调节器,这样view不能直接调用model中得数据,而是通过presenter来进行操作,此外Presenter与View和model的交互使用接口定义操作可以进一步达到松耦合也可以通过接口更加方便的进行测试。可以看一下流程图
算了不想写了,直接上代码吧,实在是懒得写了,这也没有保存功能,服死了。
首先定义View :
[代码]java代码:
1
2
3
4
5
|
public
interface
MainView<t> {
void
initView();
void
showData(T t);
}</t>
|
[代码]java代码:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
public
class
MainActivity
extends
AppCompatActivity
implements
MainView<model>{
private
MainPresenter mainPresenter;
private
TextView textview;
@Override
protected
void
onCreate(
@Nullable
Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_mains);
initView();
}
@Override
public
void
initView() {
textview = (TextView) findViewById(R.id.textview);
mainPresenter =
new
MainPresenter(
this
);
mainPresenter.loadData();
}
@Override
public
void
showData(Model model) {
textview.setText(model.getName());
}
}</model>
|
然后定义presenter:
[代码]java代码:
1
2
3
4
5
|
public
interface
Presenter<t> {
void
loadData();
void
loadDataSuccess(T t);
void
loadFail();
}</t>
|
[代码]java代码:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
public
class
MainPresenter
implements
Presenter<model>{
private
MainView mainView;
private
MainModel mainModel;
public
MainPresenter(MainView mainView) {
this
.mainView = mainView;
mainModel =
new
MainModel(
this
);
}
@Override
public
void
loadData() {
mainModel.getData();
}
@Override
public
void
loadDataSuccess(Model model) {
mainView.showData(model);
}
@Override
public
void
loadFail() {
}
}</model>
|
最后是model的定义:
[代码]java代码:
01
02
03
04
05
06
07
08
09
10
11
|
public
class
Model {
String name;
public
String getName() {
return
name;
}
public
void
setName(String name) {
this
.name = name;
}
}
|
[代码]java代码:
01
02
03
04
05
06
07
08
09
10
11
12
|
public
class
MainModel {
MainPresenter mainPresenter;
public
MainModel(MainPresenter mainPresenter) {
this
.mainPresenter = mainPresenter;
}
//从服务器中获取数据
public
void
getData(){
//这个方法主要是获取数据如果成功则调用MainPresenter的loadDataSuccess 方法
//如果失败就调用MainPresenter的loadFail()方法
}
}
|
从代码中可以看出model和view不会直接联系,都是通过presenter。各个分层更加明细。
刚刚发表了一篇,结果没有保存到,只能重新写了,麻烦可不可以做成没有提交上,就给用户保存的功能啊。