最近在学习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的思想