- MVP模式
- 谈起MVC模式可能大家都耳熟能详,最开始多用于web应用的开发,后在移动开发的过程中也引入了MVC,但是很多公司的项目在使用MVC的时候并没有很好的将三层解耦,很多的数据请求操作仍是在Activity里面执行,造成很多代码的可维护性仍然不高。
- MVP模式的使用大大降低了mode和view之间的耦合度,方便应用的扩展。MVP结构中View和Model都通过Presenter来进行解耦。
项目主要实现的功能是展示一个列表数据,用不同的方式展示,一种是ListView的方式,一种是GridView的方式,项目结构通过对扩展开放对修改关闭,在不修改源代码的情况下修改展示方式。
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView) findViewById(R.id.listView);
listView.setAdapter(new AvatarListAdapter(this, list));
}
上面的是最基本的实现方式,接下来使用MVP来实现,在MVP模式中有三个角色,Model、View、Presenter,先从简单的Model开始,Model中所要做的工作就是获取数据,在实际开发中,最好有一个BaseModel的接口定义一些抽象方法,Demo中为了演示是从本地获取的数据,在实际的开发中则为网络数据加载。
BaseModel的代码:
public interface BaseModel
{
//加载数据的方法,因为没有返回值所以在数据获取到之后需要回调
void loadData(ResultCallBack callBack);
/**
* 加载完数据之后回调的函数
*/
interface ResultCallBack
{
void onResult(List result);
}
}
具体实现获取信息的model:
public class AvatarListModel implements BaseModel
{
@Override
public void loadData(ResultCallBack callBack)
{
List<AvatarBean> list = new ArrayList<AvatarBean>();
list.add(new AvatarBean(R.mipmap.image_1,"XiaoMing"));
list.add(new AvatarBean(R.mipmap.image_2,"XiaoMing"));
list.add(new AvatarBean(R.mipmap.image_3,"XiaoMing"));
list.add(new AvatarBean(R.mipmap.image_4,"XiaoMing"));
list.add(new AvatarBean(R.mipmap.image_5,"XiaoMing"));
list.add(new AvatarBean(R.mipmap.image_6,<