MVP的理解和使用

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。各个分层更加明细。

刚刚发表了一篇,结果没有保存到,只能重新写了,麻烦可不可以做成没有提交上,就给用户保存的功能啊。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值