一.建立Module,View,Presenter的业务接口
public interface ViewContract {
interface Presenter {
void getDetailMessage();
}
interface View extends BaseView {
void onGetMessage(String message);
}
interface Module{
String getLocalMessage();
}
}
二.建立Module,View,Presenter的公共基类
public class BaseModel {
private Context mContext;
public BaseModel(Context context) {
this.mContext = context;
}
public void destory() {
}
}
public abstract class BasePresenter<M extends BaseModel, V> {
protected Context mContext;
protected V mView;
protected M mModel;
public BasePresenter(Context context) {
this.mContext = context;
}
public void attach(V view) {
attachView(view);
attachModule();
}
public void detach() {
detachView();
detachModule();
}
void detachModule() {
mModel.destory();
mModel = null;
}
private void detachView() {
this.mView = null;
}
protected void attachModule() {
mModel = initModel();
}
protected abstract M initModel();
private void attachView(V view) {
this.mView = view;
}
}
public interface BaseView {
void initView();
void initData();
void initListener();
}
三.实现详细的Module,View,Presenter的业务逻辑
public class MessageModule extends BaseModel implements ViewContract.Module {
public MessageModule(Context context) {
super(context);
}
@Override
public void destory() {
super.destory();
}
@Override
public String getLocalMessage() {
return "this is mvp module";
}
}
public class MessagePresenter extends BasePresenter<MessageModule, ViewContract.View> implements ViewContract.Presenter {
private static final String TAG = MessagePresenter.class.getSimpleName();
public MessagePresenter(Context context) {
super(context);
}
@Override
public void getDetailMessage() {
String message = mModel.getLocalMessage();
Log.d(TAG,"message = " + message);
mView.onGetMessage(message);
}
@Override
protected MessageModule initModel() {
return new MessageModule(mContext);
}
}
public class MainActivity extends BaseActivity<MessageModule,ViewContract.View,MessagePresenter> implements ViewContract.View {
private static final String TAG = MainActivity.class.getSimpleName();
private TextView mTvShow;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initData();
}
@Override
public void onGetMessage(String message) {
mTvShow.setText(message);
}
@Override
public void initView() {
mTvShow = findViewById(R.id.tv_show);
}
@Override
public void initData() {
mPresenter.getDetailMessage();
}
@Override
public void initListener() {
}
@Override
protected MessagePresenter initPresenter() {
mPresenter = new MessagePresenter(this);
return mPresenter;
}
}
public abstract class BaseActivity<M extends BaseModel,V,P extends BasePresenter<M,V>> extends AppCompatActivity {
protected P mPresenter;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mPresenter = initPresenter();
if (mPresenter != null) {
mPresenter.attach((V) this);
}
}
protected abstract P initPresenter();
@Override
protected void onDestroy() {
super.onDestroy();
if (mPresenter != null) {
mPresenter.detach();
}
}
}
四.打包运行业务逻辑
在MainActivity中initData()方法执行业务层prestenter方法mPresenter.getDetailMessage(),
在getDetailMessage方法中又调用model层方法mModel.getLocalMessage(),获取信息,在Prestenter通过mView.onGetMessage(message),把Model层数据回调给
View层显示.