android实践个人总结报告,Android MVP模式实践总结(附带简单例子)

Android MVP模式实践总结与示例

Android MVP模式实践总结(附带简单例子)

最近在做毕业设计,题目不是很难,但是后来发现功能有点多,感觉是苦力活,还好用的是设计MVP模式,虽然刚开始也不是特别理解,不过写的东西多就会发现这个模式的好处。

代码虽然好像多了,但思路非常清晰,敲代码的速度特别快,特别酸爽。

出现Bug很容易知道哪里出差错。

粽子,感觉开发效率快了,然后错误少了。

感觉,学MVP最好还是看下官方的介绍,如果英文过得去的话。

首先, 为什么不用传统的MVC(model, view, controller)呢,因为传统的MVC模式在Android中,把View和controller都杂糅到Activity当中,导致Activity越来越臃肿,使得难以开发和维护。而MVP(model, view, presenter)模式中,则把一些业务逻辑分离出来放到Presenter中,在MVP中的M(model)和V(view)是没有箭头连接的,也就是MVP中(View只需要做些与用户相关的操作,即绘制界面以及与用户交互),其他的业务功能逻辑都交由Presenter来完成。

6f3e43c34610747ff7ee31081da2bc70.png

在官方介绍中有Contract这个Interface,里面定义了View和Presenter接口,其实Contract在mvp中什么角色也不是,只是把view和presenter定义在一起方便管理。

现在给个简单例子:

假设我们要从网络获取数据并显示用户的个人界面;

同时我们可以更改用户数据并上传到服务器;

为了简单起见并不真正的获取网络数据,也省去了异步等操作,在实际开发中都是要考虑的。

首先来看View和Presenter的接口定义

public interface BasePresenter {

void start();

}

public interface BaseView {

void setPresenter(T presenter);

}

public interface UserInfoContract {

interface Presenter extends BasePresenter{

void loadUserInfo();

void changeAge();

}

interface View extends BaseView{

void showUserInfoView(UserInfo userInfo);

void showErrorMessage(String errMsg);

UserInfo getUserInfo();

}

}

可以看到在BaseView这个基类接口中含有setPresenter,从图上也可以看出,View和Presenter是可以相互交换数据的,所以一般都会互相持有对方的引用。我们再看看它们的实现类。

public class UserInfoActivity extends AppCompatActivity implements UserInfoContract.View{

TextView nameTxt;

TextView ageTxt;

EditText newAgeEdit;

Button change;

UserInfoContract.Presenter presenter;

UserInfo info;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_user_info);

nameTxt = (TextView)findViewById(R.id.name);

ageTxt = (TextView)findViewById(R.id.age);

newAgeEdit = (EditText)findViewById(R.id.new_age);

change = (Button)findViewById(R.id.change);

change.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

String str = newAgeEdit.getText().toString();

if(str.length() !=0 ){

int ageInt = Integer.valueOf(str);

info.setAge(ageInt);

presenter.changeAge();

}

}

});

//创建Presenter

UserInfoContract.Presenter presenter =new UserInfoPresenter(this);

}

@Override

public void showUserInfoView(UserInfo userInfo) {

//更新用户界面

info = userInfo;

nameTxt.setText(userInfo.getName());

ageTxt.setText(userInfo.getAge() + "");

}

@Override

public void showErrorMessage(String errMsg) {

//显示错误信息

Toast.makeText(this,errMsg,Toast.LENGTH_LONG).show();

}

@Override

public UserInfo getUserInfo() {

return info;

}

@Override

public void setPresenter(UserInfoContract.Presenter presenter) {

this.presenter = presenter;

}

}

public class UserInfoPresenter implements UserInfoContract.Presenter {

UserInfoContract.View view;

UserInfo info;

public UserInfo getNetworkData(){

//模拟网络io等操作,获取数据

if(info == null){

info = new UserInfo();

info.setAge(16);

info.setId(1);

info.setName("lawliex");

}

return info;

}

public UserInfoPresenter(UserInfoContract.View view) {

this.view = view;

view.setPresenter(this);

start();

}

@Override

public void loadUserInfo() {

UserInfo userInfo = getNetworkData();

//取得数据后,因为presenter持有view的引用,可以回调view的相关方法,此处假设加载数据成功,回调显示正常界面

view.showUserInfoView(userInfo);

//如果发生错误则回调

//view.showErrorMessage("error");

}

@Override

public void changeAge() {

info = view.getUserInfo();

//模拟更新数据到服务器,成功后,更新View的数据

start();

}

@Override

public void start() {

loadUserInfo();

}

}

项目源码

混合动力汽车(HEV)模型的Simscape模型(Matlab代码、Simulink仿真实现)内容概要:本文档介绍了一个混合动力汽车(HEV)的Simscape模型,该模型通过Matlab代码和Simulink仿真工具实现,旨在对混合动力汽车的动力系统进行建模与仿真分析。模型涵盖了发动机、电机、电池、传动系统等关键部件,能够模拟车辆在不同工况下的能量流动与控制策略,适用于动力系统设计、能耗优化及控制算法验证等研究方向。文档还提及该资源属于一个涵盖多个科研领域的MATLAB仿真资源包,涉及电力系统、机器学习、路径规划、信号处理等多个技术方向,配套提供网盘下载链接,便于用户获取完整资源。; 适合人群:具备Matlab/Simulink使用基础的高校研究生、科研人员及从事新能源汽车系统仿真的工程技术人员。; 使用场景及目标:①开展混合动力汽车能量管理策略的研究与仿真验证;②学习基于Simscape的物理系统建模方法;③作为教学案例用于车辆工程或自动化相关课程的实践环节;④与其他优化算法(如智能优化、强化学习)结合,实现控制策略的优化设计。; 阅读建议:建议使用者先熟悉Matlab/Simulink及Simscape基础操作,结合文档中的模型结构逐步理解各模块功能,可在此基础上修改参数或替换控制算法以满足具体研究需求,同时推荐访问提供的网盘链接获取完整代码与示例文件以便深入学习与调试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值