Android MVP 模式介绍与实战
2016-11-03 16:36
393 查看
1.什么是MVP?
Model: 业务逻辑和实体模型 View:用户交互和视图显示,在android中对应activity Presenter: 负责完成View于Model间的逻辑和交互
2.为什么要用MVP?
通常我们都用MVC。但是原有的MVC模式有一些短板。比如在android开发中,activity充当着MVC中Controller的角色,但是在实际开发中还需要处理view的逻辑(既担任V,又担任C)。当业务界面复杂时我的activity会显得很庞大。于是出现了MVP模式,它新增了一个Presenter角色用于处理数据和界面的模型以及逻辑,Activity仅仅用于展示界面和用户交互,这样就解决了MVC中角色不清的局面。所以,MVP与MVC的重大区别:在MVP中View并不直接使用Model,它们之间的通信是通过Presenter (MVC中的Controller)来进行的,所有的交互都发生在Presenter内部。
3.实战演练
现在我们来做一个demo,功能很简单。点击button添加一个用户,点击listview删除一个用户。xml文件如下<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/LinearLayout1" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.example.mvpdemo.MainActivity" > <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="添加" /> <ListView android:id="@+id/listView1" android:layout_width="match_parent" android:layout_height="match_parent" > </ListView> </LinearLayout>
先看一下demo的结构:
整个项目一共有三个操作
1.添加(操作Model) 2.删除(操作Model) 3.显示(操作View。这一点不太容易想到,毕竟MVC里面activity同时担任V和C的角色,不容易看出来)
因此,整个demo的操作逻辑就很清晰了
MainActivity.java
public class MainActivity extends Activity implements MainViewOperation { private Button button; private ListView listView; private ArrayAdapter<User> adapter; private Presenter presenter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button = (Button) findViewById(R.id.button1); listView = (ListView) findViewById(R.id.listView1); presenter = new Presenter(this); adapter = new ArrayAdapter<User>(this, android.R.layout.simple_list_item_1, presenter.getUserList()); listView.setAdapter(adapter); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { presenter.addUser(new User("aaa", new Random().nextInt(10) + 1)); } }); listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { presenter.removeUser(position); } }); } //显示数据,由于是adapter,所以只需要notifyDataSetChanged就可以将数据变化显示出来 @Override public void show() { adapter.notifyDataSetChanged(); } }
MainViewOperation.java(提供“显示数据”接口)
public interface MainViewOperation { public void show(); }
User.java(model类)
public class User { public String name; public int age; public User(String name, int age) { this.name = name; this.age = age; } }
UserOperation.java(实现“添加”“删除”)
public class UserOperation { private ArrayList<User> userList = new ArrayList<User>(); public void addUser(User user) { userList.add(user); } public void removeUser(int index) { userList.remove(index); } public ArrayList<User> getUserList(){ return userList; } }
Presenter.java(M和V的交互)
public class Presenter { private UserOperation userOperation; private MainViewOperation mainViewOperation; public Presenter(MainViewOperation mainView) { this.mainViewOperation = mainView; userOperation = new UserOperation(); } public void addUser(User user){ userOperation.addUser(user); mainViewOperation.show(); } public void removeUser(int index){ userOperation.removeUser(index); mainViewOperation.show(); } public ArrayList<User> getUserList(){ return userOperation.getUserList(); } }
相关文章推荐
- android MVP 模式介绍与实战
- android开发 MVP模式介绍与实战
- Android之MVP 模式:简单易懂的介绍方式
- Android开发模式之MVC,MVP和MVVM的简单介绍与区别
- Android MVP 模式 简单易懂的介绍方式
- Android开发模式之MVC,MVP和MVVM的简单介绍与区别
- Android开发模式之MVC,MVP和MVVM的简单介绍与区别
- Android---MVP模式介绍,以及MVP与MVC的区别
- Android之---MVP设计模式(简单介绍)
- android 中MVC与MVP,MVVM模式使用介绍
- 安卓学习笔记---Android MVP 模式 简单易懂的介绍方式
- (转)Android MVP模式 简单易懂的介绍方式
- 设计模式——Android 常用设计模式之MVP详解及项目实战
- Android开发模式之MVC,MVP和MVVM的简单介绍与区别
- Android开发模式之MVC,MVP和MVVM的简单介绍与区别
- Android开发模式之MVC,MVP和MVVM的简单介绍与区别
- Android平台MVP开发模式实战入门
- Android MVP 模式:简单易懂的介绍方式
- android MVP模式简单介绍
- Android开发模式之MVC,MVP和MVVM的简单介绍与区别