1.MVP 模式 Model:复杂的数据处理和网络请求等业务逻辑的操作 View:主要负责页面的显示 Presenter:主持层,拥有Model和view的对象可以控制Model 进行数据处理反馈给view层,是一个中间枢纽的作用。 从上面的图中看到Persenter层完全隔离View 和model层,view要进行操作的时候,调用presenter,presenter持有view的引用和model的引用,然后判断调用什么Model,进行具体的业务处理,model处理完成之后,把结果回调给Presenter层,presenter层又传递给view层,从而实现Model与view的直接交互,减少了耦合,persenter层不做具体的业务处理只负责支配model层做什么,得到结果回馈给view层(从这看来presenter类似大管家的角色,view类似老板的角色,view交给大管家presenter一个工作,大管家找具体的人打工的model层来做,然后工人告诉管家这个事情做好了,管家回馈给老板,大家可以这样形象的理解) 3.代码示例分析 (2)具体的代码 ②:presenter层 ③model层 4.demo的GitHub的地址https://github.com/wyc1411162011/MvpDemo.git
2.mvp架构图
(1)代码结构图:
①:view层
/** * Created by ufsoft on2020-05-20 * describle:这个是处理View层回调的,也就是Presenter 要使用的封装方法都要在这里实现接口 * presenter持有View的接口,他的业务逻辑的所有数据都要从View获取,所以他用到的view所有的数据都要以方法返回 */ public interface ILoginView { public void loginSuccess(); public void loginFail(); public void showProgress(); public void hideProgress(); }
package com.moumou.mvpdemo.activity; import androidx.appcompat.app.AppCompatActivity; import android.app.Activity; import android.app.ProgressDialog; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import com.moumou.mvpdemo.R; import com.moumou.mvpdemo.presenter.LoginPresenter; import com.moumou.mvpdemo.presenter.impl.ILoginPresenter; import com.moumou.mvpdemo.view.impl.ILoginView; public class LoginActivity extends Activity implements ILoginView { private EditText et_username; private EditText et_password; private Button bt_login; private ProgressDialog progressDialog; //view持有Presenter 的引用可以调用他的方法 private ILoginPresenter loginPresenter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); bindViews(); initDatas(); bindListeners(); } private void initDatas(){ progressDialog = new ProgressDialog(this); loginPresenter = new LoginPresenter(this); } private void bindViews() { et_username = (EditText) findViewById(R.id.et_username); et_password = (EditText) findViewById(R.id.et_password); bt_login = (Button) findViewById(R.id.bt_login); } private void bindListeners(){ bt_login.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { loginPresenter.login(et_username.getText().toString(),et_password.getText().toString()); } }); } @Override public void loginSuccess() { Toast.makeText(LoginActivity.this,"登陆成功",Toast.LENGTH_LONG).show(); } @Override public void loginFail() { Toast.makeText(LoginActivity.this,"登陆失败",Toast.LENGTH_LONG).show(); } @Override public void showProgress() { progressDialog.show(); } @Override public void hideProgress() { progressDialog.dismiss(); } }
public class LoginPresenter implements ILoginPresenter { //持有view和model的引用,这里view的引用用弱引用避免内存溢出 private WeakReference<ILoginView>weakReference; private ILoginModel loginModel; public LoginPresenter(ILoginView loginView){ this.weakReference = new WeakReference<>(loginView); loginModel = new LoginModel(); } //调用Model进行数据处理后,然后回调view的方法进行回显 @Override public void login(String userName, String passWord) { if(loginModel != null && weakReference != null && weakReference.get() != null){ final ILoginView loginView = weakReference.get(); loginView.showProgress(); loginModel.login(userName, passWord, new LoginViewListener() { @Override public void onLoginSucess() { loginView.hideProgress(); loginView.loginSuccess(); } @Override public void onLoginFail() { loginView.hideProgress(); loginView.loginFail(); } }); } } }
public class LoginModel implements ILoginModel { @Override public void login(final String userName, final String passWord, final LoginViewListener listener) { //这里弄一个延迟等待三秒模仿网络加载的过程 new AsyncTask<Void,Void,Void>(){ @Override protected Void doInBackground(Void... voids) { try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } return null; } @Override protected void onPostExecute(Void aVoid) { super.onPostExecute(aVoid); //这里进行简单的判断,不做网络请求了 if(TextUtils.isEmpty(userName) || TextUtils.isEmpty(passWord)){ listener.onLoginFail(); }else{ listener.onLoginSucess(); } } }.execute(); } }
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算