android的mvp与传统的mvc的比较

来源:互联网 发布:开源旅游cms 编辑:程序博客网 时间:2024/06/14 05:45

http://blog.csdn.net/lmj623565791/article/details/51339751; 

本文出自:【张鸿洋的博客】

昨天晚上看了下我的偶像鸿神的博客,他博客中有一篇Android的mvp与传统的mvc的比较,我阅读了一遍之后,整个人神清气爽,太棒了,不愧是我的鸿神,然后自己吧思路整理了下,通过自己的理解吧他写在自己的博客上,以便不时之需。

mvc是业务逻辑层,视图层,控制层。由于Android的layout的布局的原因,导致视图层也被放到了activity中,又由于activity本身承担着控制层的任务,这样一看来,就会导致activity中代码很臃肿,不便于管理。下面是我用他的例子敲的

public interface RequestBiz {//定义一个接口,public void requestData(RequestListener listener);}
import java.util.List;/** * 回调函数 * */public interface RequestListener {public void onsucess(List<String> data);
           public void foresult();}

//实现它的方法

public class RequestBizImp implements RequestBiz {@Overridepublic void requestData(final RequestListener listener) {new Thread(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubList<String> list = new ArrayList<String>();for (int i = 0; i < 10; i++) {String name = "刘备" + i;list.add(name);}if (list != null) {// 获取到的数据添加到回调函数中listener.onsucess(list);}else{
<span style="white-space:pre"></span>listener.<span style="font-family: Arial, Helvetica, sans-serif;">foresult();</span>}}).start();}}
//在MainActivity中
public class MainActivity extends ActivityOnItemClickListener {private ListView listview;private Handler handler = new Handler();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);listview = (ListView) findViewById(R.id.listview);// mvcģʽ mvc();}private void mvc() {RequestBiz biz = new RequestBizImp();biz.requestData(new RequestListener() {@Overridepublic void onsucess(final List<String> data) {// TODO Auto-generated method stubhandler.post(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(),android.R.layout.simple_list_item_1, data);listview.setAdapter(adapter);}});}
                           @Override<span style="white-space:pre"></span>public void foresult() {<span style="white-space:pre"></span>// TODO Auto-generated method stub<span style="white-space:pre"></span>System.out.println("数据为空");<span style="white-space:pre"></span>}});}

//mvp的模式



此图在鸿神博客中截取出来的。便于我以后参加的理解。

有图的话我就无需废话了,直接上代码

activity管理view

public interface Myview {// mvp是activity控制viewpublic void listData(List<String> list);}

public class Persten {private RequestBiz biz;private Myview myview;private Handler handler;public Persten(Myview myview) {// 初始化this.myview = myview;// 实现接口biz = new RequestBizImp();handler = new Handler(Looper.getMainLooper());}// 初始化数据public void onResume() {biz.requestData(new RequestListener() {@Overridepublic void onsucess(final List<String> data) {// TODO Auto-generated method stubhandler.post(new Runnable() {@Overridepublic void run() {myview.listData(data);}});}});}public void getPostion(int postion) {Toast.makeText(MyAppliction.getContext(), "第" + postion + "项", 0).show();}

public class MainActivity extends Activity implements Myview,OnItemClickListener {private ListView listview;...............private Persten persten;
persten = new Persten(this);<span style="white-space:pre"></span>listview.setOnItemClickListener(this);
@Override<span style="white-space:pre"></span>protected void onResume() {<span style="white-space:pre"></span>// TODO Auto-generated method stub<span style="white-space:pre"></span>super.onResume();<span style="white-space:pre"></span>// 初始化数据<span style="white-space:pre"></span>persten.onResume();<span style="white-space:pre"></span>}
@Override<span style="white-space:pre"></span>public void listData(List<String> list) {<span style="white-space:pre"></span>ArrayAdapter<String> adapter = new ArrayAdapter<String>(<span style="white-space:pre"></span>getApplicationContext(), android.R.layout.simple_list_item_1,<span style="white-space:pre"></span>list);<span style="white-space:pre"></span>listview.setAdapter(adapter);<span style="white-space:pre"></span>}<span style="white-space:pre"></span>@Override<span style="white-space:pre"></span>public void onItemClick(AdapterView<?> adapterView, View view, int postion,<span style="white-space:pre"></span>long l) {<span style="white-space:pre"></span>// TODO Auto-generated method stub<span style="white-space:pre"></span>persten.getPostion(postion);<span style="white-space:pre"></span>}
感谢我的鸿神,<span style="color: rgb(85, 85, 85); font-family: 'microsoft yahei'; font-size: 14px; line-height: 17.5px; background-color: rgba(128, 128, 128, 0.0470588);">本文出自:</span><a target=_blank href="http://blog.csdn.net/lmj623565791/" style="text-decoration: none; box-sizing: border-box; color: rgb(12, 137, 207); font-family: 'microsoft yahei'; font-size: 14px; line-height: 17.5px; background-color: rgba(128, 128, 128, 0.0470588);">【张鸿洋的博客】</a>
此文写于2016年5月11日,此时本人正读大二。转载并自己用自己的话写出来不为别的,只为自己能更好的了解他,


0 0