项目MVP模式框架

一.建立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层显示.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值