继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

MVP的理解和使用

不负相思意
关注TA
已关注
手记 136
粉丝 12
获赞 69

MVP大家应该差不多都知道了,他其实是MVC的升华版,差不多是在view和model中加了一个调节器,这样view不能直接调用model中得数据,而是通过presenter来进行操作,此外Presenter与View和model的交互使用接口定义操作可以进一步达到松耦合也可以通过接口更加方便的进行测试。可以看一下流程图

5bba07b100014a6509880622.jpg

5bba07c00001d25109880626.jpg

算了不想写了,直接上代码吧,实在是懒得写了,这也没有保存功能,服死了。

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

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

原文链接:http://www.apkbus.com/blog-432040-61230.html

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP