android的mvp与传统的mvc的比较


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 {

	@Override
	public void requestData(final RequestListener listener) {
		new Thread(new Runnable() {

			@Override
			public void run() {
				// TODO Auto-generated method stub
				List<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 Activity
		OnItemClickListener {
	private ListView listview;
	private Handler handler = new Handler();
	

	@Override
	protected 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() {

			@Override
			public void onsucess(final List<String> data) {
				// TODO Auto-generated method stub
				handler.post(new Runnable() {

					@Override
					public void run() {
						// TODO Auto-generated method stub
						ArrayAdapter<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控制view
	public 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() {
			@Override
			public void onsucess(final List<String> data) {
				// TODO Auto-generated method stub
				handler.post(new Runnable() {

					@Override
					public 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>

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值