1、MVP相对传统的MVC大大的减少了类与类之间的耦合性
2、个人相对MVP的总结大概有三点:
第一: View层: view层主要是UI层,主要是接口
public interface LoginView { String getUserName(); String getPassWord(); }
第二个:Model层
Model层需要试想Model的接口,主要是具体的业务实现,如网络请求访问等这些
public class LoginMode implements ILoginInter { private static final String TAG = "LoginMode"; private LoginPresenteImpl loginPresenteImpl; public LoginMode(LoginPresenteImpl LoginPresenteImpl){ loginPresenteImpl = LoginPresenteImpl; } @Override public void login(String username, String password) { EMClient.getInstance().login(username, password, new EMCallBack() { @Override public void onSuccess() { loginPresenteImpl.onSuccess(); } @Override public void onError(int i, String s) { Log.e(TAG, "onError: " + s ); loginPresenteImpl.onError(); } @Override public void onProgress(int i, String s) { } }); } }Model层的接口
public interface ILoginInter { void login(String username, String password); }
第三个:Presenter层,presenter需要实现presenter的接口
public class LoginPresenter implements LoginPresenteImpl{ private Context context; private LoginView loginView; private final LoginMode loginMode; private static final String TAG = "LoginPresenter"; public LoginPresenter(LoginView loginView,Context context){ this.loginView = loginView; loginMode = new LoginMode(this); this.context = context; } @Override public void login() { String userName = loginView.getUserName(); String passWord = loginView.getPassWord(); Log.e(TAG, "login: username" + userName + " " + passWord ); loginMode.login(userName, passWord); } @Override public void onSuccess() { SharedPrefsUtil.setBoolean("is_login",true); Log.e(TAG, "onSuccess: " ); Intent mIntext = new Intent(context, MainActivity.class); context.startActivity(mIntext); } @Override public void onError() { Log.e(TAG, "onError: " ); } }presenter层的接口
public interface LoginPresenteImpl { void login(); void onSuccess(); void onError(); }
接下了就是构造方法了:
Model需要在构造方法中有presenter层接口的引用是咧
Present 层需要在构造方法中持有View层的是咧 和Model层的是咧
View层就是我们操作的activity和fragment,需要实现View层的接口
public class LoginActivity extends BaseActivty implements LoginView{ @BindView(R.id.login_account)EditText mCount; @BindView(R.id.login_account_psw)EditText mPsw; private LoginPresenteImpl loginPresenteImpl; @OnClick(R.id.login_)void loging(){ login(); } @Override public int getLayoutId() { return R.layout.activity_login; } @Override protected void initView() { loginPresenteImpl = new LoginPresenter(this,this); } private void login() { loginPresenteImpl.login(); } @Override public String getUserName() { String s = mCount.getText().toString().toString(); return s; } @Override public String getPassWord() { String trim = mPsw.getText().toString().trim(); return trim; } }