Android开发之初识MVP模式
来源:互联网 发布:阿里巴巴数据库在哪 编辑:程序博客网 时间:2024/05/17 01:47
各位亲爱的小伙伴,有没有想我啊,我胡汉wing又回来了。
很长一段时间没有更新博客。。原因是。。从离职回到学校以后,一直在享受最后的学生时光(打游戏).. 游戏固然很爽,但是觉得实在很荒废,于是半夜诈个尸..学习一下流行的MVP模式,就拿我刚学Android的项目“wifi密码读取器”开刀吧。。以前的代码很烂,所以来个彻底的重构…
MVP模式
mvp模式的介绍网上有很多,这里在简述一下:
MVP即 Model View Presenter, 他与MVC的区别在于在MVP里面View和Model不直接进行交互,完全交给Presenter。这样Activity就真实的成为了一个View,逻辑任务交给Presenter处理。不再是以前Activity即充当View又冲当Controller的情况。
简单来说如下图(盗来的,出自鸿洋大大这篇博客):
学习编写
简单的了解了一下MVP以后,开始拿“wifi密码读取器”开刀(wifi密码读取器是一款能够读取手机wifi密码的应用,配合万能钥匙使用更赞哦。。)
明确需求
进行第一部分的编写实现,需求如下图:
基本就是:
+ 初始化listview的内容
+ 为FloatingActionButton添加监听
代码的编写
首先,来一个实体Bean
public class WifiBean { private String mSsid = ""; private String mComment = ""; private String mKey = ""; public String getmSsid() { return mSsid; } public void setmSsid(String mSsid) { this.mSsid = mSsid; } public String getmComment() { return mComment; } public void setmComment(String mComment) { this.mComment = mComment; } public String getmKey() { return mKey; } public void setmKey(String mKey) { this.mKey = mKey; }}
Model层,主要用于数据的获取或者其他增删操作
public interface IWifiModel { ArrayList<WifiBean> getWifis(); void addWifi(WifiBean wifiBean); void delWifi(WifiBean wifiBean);}public class WifiModelImpl implements IWifiModel { @Override //这里模拟实现从手机读取出wifi的密码 public ArrayList<WifiBean> getWifis() { ArrayList<WifiBean> list = new ArrayList<>(); for(int i = 0 ;i<5;i++) { list.add(new WifiBean()); } return list; } @Override public void addWifi(WifiBean wifiBean) { } @Override public void delWifi(WifiBean wifiBean) { }}
View层,主要表明view要做哪些事情
public interface IWifiView { void setListViewData(ArrayList<WifiBean> list); void showSnackbar(View view);}
因为Activity即为View,所以让Activity实现这个接口,并且实现view的方法。
public class MainActivity extends AppCompatActivity implements IWifiView{ private ListView mListView; private WifiAdapter mWifiAdapter; //包含一个presenter private WifiPresenterImpl mWifiPresenter; private Toolbar mToolbar; private FloatingActionButton mFAB; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //initViews()方法仍然不变 initViews(); //初始化一个Presenter mWifiPresenter = new WifiPresenterImpl(this); //将需要初始化的东西交由Presenter处理 mWifiPresenter.onCreate(); } private void initViews() { mToolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(mToolbar); mListView = (ListView) findViewById(R.id.listView); mFAB = (FloatingActionButton) findViewById(R.id.fab); mFAB.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //处理用户的事件 mWifiPresenter.showSnackbar(view); } }); } //实现view接口的方法,为listview设置数据 @Override public void setListViewData(ArrayList<WifiBean> list) { mWifiAdapter = new WifiAdapter(this,list); mListView.setAdapter(mWifiAdapter); } //实现view接口的方法,弹出Snackbar @Override public void showSnackbar(View view) { Snackbar.make(view, "侧滑有惊喜哦!", Snackbar.LENGTH_LONG) .setAction("Action", null).show(); }}
最后是Presenter ,用来处理Model和View
public interface IWifiPresenter { //交付过来的onCreate void onCreate();}public class WifiPresenterImpl implements IWifiPresenter{ private IWifiView mWifiView; private IWifiModel mWifiModel; public WifiPresenterImpl(IWifiView wifiView) { //传入View mWifiView = wifiView; //初始化Model mWifiModel = new WifiModelImpl(); } //私有方法,在onCreate里调用,用来初始化listview数据,presenter操作model和view private void setWifiDatas() { mWifiView.setListViewData(mWifiModel.getWifis()); } //交付过来的onCreate()周期 @Override public void onCreate() { setWifiDatas(); } //让Snackbar显示 public void showSnackbar(View view) { mWifiView.showSnackbar(view); }}
好了,基本上简单的展示写完了,可以看到思路逻辑非常的清晰。这也是我对MVP模式的一点理解和应用,光是这一点内容,就理解了好久。。。。如果有什么错误的地方,求各位拍砖,一起讨论。
欢迎关注我的博客,蟹蟹!
参考文章:
http://blog.csdn.net/knxw0001/article/details/39637273
http://blog.csdn.net/duo2005duo/article/details/50594757
http://blog.csdn.net/lmj623565791/article/details/46596109
- Android开发之初识MVP模式
- Android MVP模式之(一)初识
- 初识Android MVP模式
- android开发模式之MVP
- android开发之--MVP模式
- Android开发之MVP模式
- Android开发之MVP模式
- Android 初识mvp设计模式
- 也谈Android开发之MVP模式
- Android开发之浅谈框架模式MVP
- Android开发之MVP模式的使用
- android之MVP开发模式初探
- Android开发 之 设计模式MVP
- Android MVP开发模式
- android MVP 开发模式
- Android mvp开发模式
- Android 开发MVP模式
- Android mvp开发模式
- Netty4学习笔记(二) TCP黏包/拆包解决办法
- Swift基础1.5——基本语法——集合
- 数据结构之——单链表的实现
- 数据结构之——双链表的实现
- Swift基础2.1——函数
- Android开发之初识MVP模式
- SQL Server 2012时出现命名管道提供程序: 无法打开与 SQL Server 的连接
- [LeetCode]Implement Queue using Stacks
- Tutorial – Creating outline effect around objects
- 两种方法求解Fibonacci数列
- 页面性能优化的几个方面及解决方案
- Swift基础2.1——闭包
- Swift基础3.1——构造函数
- 哈夫曼编码