MVP -----个人理解与示例(android例子 实现)
来源:互联网 发布:怎样才能把淘宝店做好 编辑:程序博客网 时间:2024/05/19 03:20
MVP 也就是Model View Presenter模式,是建立一个工程的一种模式。
===================================================================================================================
以下只是基于这个贴子中的例子来说。。只是非常初级的用法和理解
==================================================================================
Model UI数据层 存放数据,数据更新,获得的方法
View UI接口 UI层显示 对于一些UI控件的显示方法
Presenter UI层的逻辑实现 就是将view和model中的数据结合起来,包含model类,通过参数的方法
将model层的数据传入view的函数里面。
==================================================================================
实现了以上那些interface和class后,通过新建一个类,implements view, 重载view中的方法, 具体实现方法,实现UI层控件的显示。
===================================================================================================================
例子分析
本工程建立了
buttonlisten interface, viewinterface , model class ,presenter class, 和应用这些类的大BOSS 实现view的类 hello class.
1,新建一个view interface ,用于控制UI上 TextView显示的text(会在presenter中将model的数据传进去),和Button 的监听器和显示的text。
package com.example.myapplication2.app;/** * Created by XJ on 2014/5/1. * 界面UI接口 */public interface view { public void setMess(String Name,String Motto);//在UI的textview中显示数据 public void setClickText(String clickText);//在BUTTON中显示提示信息 public void setClickHappen(buttonlisten listen );//为BUTTON绑定监听器,BUTTON实现的功能}
(其中由于有对于button实现的监听,所以需要一个buttonlisten的接口 。。觉得这样很别扭。。有什么更好的方法吗?还是我理解有问题。。?)
package com.example.myapplication2.app;/** * Created by XJ on 2014/5/2. * 接口。用于事件监听 */public interface buttonlisten { public void click();//在presenter中传入按键事件,需要用到的数据}
2.新建一个model class ,用于存入工程的数据和获取数据的方法(在我引用的例子里好像没有model类。。。借鉴的例子),然后presenter 会用到这个类,来将数据结合到view中
package com.example.myapplication2.app;/** * Created by XJ on 2014/5/1. * 整个工程的数据存放类 */public class model{ private final String name="I"; private final String motto=" have clicked it ! "; private final String tip="click me!";//button 上显示的提示 //获取数据的方法 public String GetName(){return name;} public String GetMotto(){return motto;} public String GetTip(){return tip;}}
3.新建一个presenter class 用于结合model和view,在构造函数中调用bind函数,bind函数中将model的数据做为参数传进去 ,然后到实现类中实现。
package com.example.myapplication2.app;/** * Created by XJ on 2014/5/1. * 在presenter中实现把model层的信息放入界面 */public class presenter { view myView; presenter(view inView) { bind(inView);//传入要实现的view } void bind(view inView)//将数据与view结合起来 { final model myModel=new model();//定义一个数据类 myView=inView; myView.setClickHappen(new buttonlisten() { public void click()//按钮事件的核心 { myView.setMess(myModel.GetName(),myModel.GetMotto());//实现在onclick中 } } ); myView.setClickText(myModel.GetTip());//会到实现类中将对应的方法实现 myView.setMess("button is"," unclicked");//会到实现类中将对应的方法实现,一开始设置textview中的信息,也可不要 }}
4.hello class 这个类继承了view接口,用来具体实现view接口,定义相应的控件,将这个view传入到presenter中,通过presenter的构造函数的bind方法实现方法的调用,在presenter接收了model相应的参数后,会返回到 hello(由于继承了view)里找到对应的重载方法,然后实现。
package com.example.myapplication2.app;import android.app.Activity;import android.os.Bundle;import android.support.v7.app.ActionBarActivity;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.widget.Button;import android.widget.TextView;//这个类通过 生成 view presenter model 来实现一个应用public class hello extends ActionBarActivity implements view{ Button button; TextView textview; buttonlisten myListener;//用于实现监听, @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.mainxml); button = (Button) findViewById(R.id.button); textview = (TextView) findViewById(R.id.textview); new presenter(this); button.setOnClickListener(new View.OnClickListener() {//点击按钮才会触发 public void onClick(View arg0) { myListener.click(); } }); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////这现就是实现view中的方法的重载。。我觉得是控件与方法的联系 @Override public void setClickText(String clickText) { button.setText(clickText); } @Override public void setMess(String s,String ss) { textview.setText(s+" "+ss ); } @Override public void setClickHappen(buttonlisten Listener ) { myListener=Listener; } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.hello, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); }}
=============================================================================以上就是本人写的例子。。
一开始真的觉得挺难理解的,直到意识到hello类才是具体实现的,(因为和之前做windows phone的那个工程有些不太一样,好像那里不是这样子实现的,但也有model,view差不多的东西。。好吧,那个我也是一知半解。。)在这个类里才有真正的控件和界面,真心觉得创建这种模式的人很了不起,终于有点体会编程也是一种艺术,程序猿也是艺术家了!
对于那个listen还是有点困惑,总觉得这样有点怪怪的,有事件都要通过它来改吗?有更直接的方法吗?自己乱七八糟地试不出来。。。
这些还都只是个人理解。。不知道有没体会到真谛。。还是totally理解错了呢??
第一次写这种解释的东东,也不知道能不能看懂。。。。。。凑合着理解吧,我已经修改很多次了,这里好像不能直接贴图片。。真是不好。。
=============================================================================
我写的这个例子的下载地址。。。 用android studio 写的。。好像是不能在eclipse打开的。。好像是。。而已。。
=============================================================================
老师给的资料
http://magenic.com/BlogArchive/AnMVPPatternforAndroid 解释得挺好的。。但还是例子最实在。。一开始不知道有例子时,就晕在里面了。。
一个例子//就是参照这个例子写的
另一个例子
http://blog.nilenso.com/blog/2013/09/10/android-native-mvp/(这两个没怎么看)
===========================================================================================
1、模型与视图完全分离,我们可以修改视图而不影响模型。
2、可以更高效地使用模型,因为所有的交互都发生在一个地方 —— Presenter内部。
3、我们可以将一个Presener用于多个视图,而不需要改变Presenter的逻辑。这个特性非常的有用,因为视图的变化总是比模型的变化频繁。
4、如果我们把逻辑放在Presenter中,那么我们就可以脱离用户接口来测试这些逻辑(单元测试)。
MVP的缺点
由于对视图的渲染放在了Presenter中,所以视图和Persenter的交互会过于频繁。还有一点需要明白,如果Presenter过多地渲染了视图,往往会使得它与特定的视图的联系过于紧密。一旦视图需要变更,那么Presenter也需要变更了。比如说,原本用来呈现Html的Presenter现在也需要用于呈现PDF了,那么视图很有可能也需要变更。
from 点击打开链接- MVP -----个人理解与示例(android例子 实现)
- MVP 个人理解2
- MVP个人理解
- andorid 中 MVP模式 个人理解与运用
- 关于android的设计模式---MVP的个人理解
- Android上MVP架构应用的个人理解
- MVP架构的理解与实现Demo
- Android MVP模式简单理解与实践
- Android MVP 模式 理解与浅析
- Android MVP模式理解(附简单登录模块例子)
- MVP模式的个人理解
- 个人对mvp的理解
- Android MVP 架构示例
- Android Mvp 简单示例
- Android:MVP模式例子
- Android MVP模式例子
- android MVC与MVP总结,加MVP 实现步骤:
- (4.6.10)Android中MVP模式与MVC模式比较(含示例)
- STM32_adc
- SQL Server触发器创建、删除、修改、查看示例步骤
- 我是一名程序员,怎样才是一种适合自己的学习方法呢?
- 冼茂源:HBase在垂直搜索业务以及数据存储中的应用!
- ListView的优化
- MVP -----个人理解与示例(android例子 实现)
- jquery 使用
- Zxing图片识别 从相册选二维码图片解析总结
- Java的常见出错和java JDK的配置
- C语言socket send()数据缓存问题
- Cocos2d-x 2.0 按键加速处理深入分析
- SSH和SMB的使用
- iOS开发 -- 分析CrashLog (3) Hopper逆向分析
- C#——抽象类和接口