android MVP模式简单实现并优化解绑

         最近在学习MVP模式简单的做了一个小练习,现在分享一下

         MVP  : android开发中常用的架构模式,降低耦合度,利用P层将M层和V层之间的交互

         Model主要是用来加载数据的,网络请求,本地数据库等等,根据获取数据并定义回调接口

         返回数据

         View主要是用来定义更改UI的接口,只要是需要处理UI都必须定义

         Present用来处理model与view层之间的逻辑关系,比较耗费资源,所以要在适当的时候关

         闭掉

         在这里我用了,弱引用和在适当时候绑定,解绑


         案例:利用MVp模式来实现一个listview加载数据的逻辑


           1:View层  加载listview数据

public interface MainView {
      public void showdata(List list);
}
           2:Model   创建一个方法加载数据,定义一个回调接口返回数据

                              如果是网络请求的就需返回不同的接口

public class MainModel {
private IModel iModel;
    public void setiModel(IModel iModel) {
        this.iModel = iModel;
    }
   //定义添加数据并回调
    public void addList(){
        List list=new ArrayList();
        for(int i=0;i<20;i++){
            list.add("张三"+i);
        }
        iModel.callback(list);
    }
    public interface IModel{
        void callback(List list);

    }
}
    3:present层      重写数据回调并显示view层更新UI

public class MianPresent implements MainModel.IModel {
    private MainModel model;
       
    private MainView mainview;
public MianPresent(MainView view) { this.mainview=view; model=new MainModel(); model.setiModel(this); } //回调方法,显示view层 @Override public void callback(List list) { mainview.showdata(list); } public void add(){ model.addList(); }}


       优化添加解绑,绑定,弱引用

public class MianPresent implements MainModel.IModel {
    private MainModel model;
    //(1)软引用,方便回收
    WeakReference<MainView> mainview;

    public MianPresent(MainView view) {
        attach(view);
        model=new MainModel();
        model.setiModel(this);
    }

    //回调方法,显示view层
    @Override
    public void callback(List list) {
        mainview.get().showdata(list);
    }
    public void add(){
        model.addList();
    }
    //绑定
    public void attach(MainView view){
        mainview= new WeakReference(view);
    }
    //解绑方法
    public void detach(){
        Log.d("sssss","sssssssssssssssssssssssssss");
        mainview.clear();
    }
}
4:mainActivity     实现view层

public class MainActivity extends AppCompatActivity implements MainView{
    private ListView listView;
    private MianPresent present;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        listView= (ListView) findViewById(R.id.listView);
        //实例化P层
        present=new MianPresent(this);
        present.add();
    }
         //显示数据
    @Override
    public void showdata(List list) {
        ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, list);
        listView.setAdapter(adapter);
    }
    //当退出时解绑优化的时候添加
    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (present!=null){
            present.detach();
        }
    }
}

以上就是一个简单的MVp的思想


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值