如何实现MVP架构

来源:互联网 发布:淘宝要交多少保证金 编辑:程序博客网 时间:2024/05/01 22:39

MVP即Model—View—Presenter,从经典的设计模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据,View负责显示。MVP架构的重点在于面向接口编程,通过接口将单一职能的Model 和 View联系起来
说起来容易做起来难,如何才能使用一个MVP架构呢?
1、Model对外暴露的接口:interface IGirlModel

public interface IGirlModel {    void loadGirl(OnGirlLoadCompleter onGirlLoadCompleter);    interface OnGirlLoadCompleter{        void onCompleter(List<Girl> girlList);    }}

View对外暴露的接口:interface IGirlView

   public interface IGirlView {    void showProgress();    void showGirl(List<Girl> girlList);}

Presenter业务逻辑控制类,持有Model和View的引用,否则如何关联?

public class IGirlPresenter {    //View Interface    IGirlModel iGirlModel = new GirlModelImpl();    //Model Interface    IGirlView iGirlView;    public IGirlPresenter(IGirlView iGirlView){        super();        this.iGirlView =iGirlView;    }

2、创建IGirlModel的实现类IGirlModelImpl

public class GirlModelImpl implements IGirlModel {    @Override    public void loadGirl(OnGirlLoadCompleter onGirlLoadCompleter) {       加载数据         }    }}

在Activity中实现IGirlView接口

public class MainActivity extends Activity implements IGirlView{    private ListView listView;    private MyAdapter myAdapter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.content_main);        listView = (ListView) findViewById(R.id.listView);        myAdapter = new MyAdapter(this);        listView.setAdapter(myAdapter);    }    @Override    public void showProgress() {    }    @Override    public void showGirl(List<Girl> girlList) {        myAdapter.setData(girlList);    }}

3、在IPresenter中定义一个方法将IGirModel和IGirlView关联起来

 public void fetch(){        if(iGirlView!=null){            iGirlView.showProgress();            iGirlModel.loadGirl(new IGirlModel.OnGirlLoadCompleter() {                @Override                public void onCompleter(List<Girl> girlList) {                    iGirlView.showGirl(girlList);                }            });        }    }

4、在IGirlView的实现类中调用Ipresenter中关联的方法,将IGirlModel中接口请求回来通过接口暴露出的数据在IGirView实现类中展示

 new IGirlPresenter(this).fetch();

如此我们便做到了IGirlModel请求数据,通过接口向外暴露,IGirlView展示数据,IPresenter持有二者的引用,将二者联系起来。这就是一个简单的MVP架构设计,是不是很简单啊,赶紧去学习吧!

0 0
原创粉丝点击