Android设计架构详解

2018-09-22  本文已影响0人  kjy_112233

一、MVC

(1)简介

二、MVP

(1)简介

public interface BaseView {
    void showError();
}
public abstract class BasePresenter<T extends BaseView> {
    private Reference<T> viewRef;

    void attachView(T view) {
        viewRef = new WeakReference<>(view);
    }

    protected T getView() {
        if (isViewAttached())
            return viewRef.get();
        else
            return null;
    }

    private boolean isViewAttached() {
        return viewRef != null && viewRef.get() != null;
    }

    void detachView() {
        if (viewRef != null) {
            viewRef.clear();
            viewRef = null;
        }
    }
}
public abstract class BaseActivity<V extends BaseView, T extends BasePresenter<V>> extends AppCompatActivity {
    protected T presenter;

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(setLayoutId());
        presenter = createPresenter();
        if (presenter != null) {
            presenter.attachView((V) this);
        }
        initView();
        initData();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (presenter != null) {
            presenter.detachView();
        }
    }

    protected abstract int setLayoutId();

    protected abstract void initView();

    protected abstract void initData();

    protected abstract T createPresenter();
}
public interface MainContract {
    interface IMainView extends BaseView {

        void showData(List<String> list);
    }


    abstract class IMainPresenter extends BasePresenter<IMainView> {

        public abstract void requestData();
    }
}
public interface OnRequestListener<T> {
    void onSuccess(T t);
    void onFailed(String string)
}
public interface IMainModel {
    void loadMessage(OnRequestListener<List<String>> list);
}
public class MainModelImpl implements IMainModel {
    private List<String> list;

    @Override
    public void loadMessage(OnRequestListener<List<String>> onRequestListener) {
        if (list == null)
            list = new ArrayList<>();
        list.add("测试信息1");
        list.add("测试信息2");
        list.add("测试信息3");
        list.add("测试信息4");
        list.add("测试信息5");
        onRequestListener.onSuccess(list);
    }
}
public class MainPresenter extends MainContract.IMainPresenter {
    private IMainModel model = new MainModelImpl();

    @Override
    public void requestData() {
        final MainContract.IMainView view = getView();
        model.loadMessage(strings -> {
            if (strings.size() > 0) {
                view.showData(strings);
            } else {
                view.showError();
            }
        });
    }
}
public class MainActivity extends BaseActivity<MainContract.IMainView, MainPresenter> implements MainContract.IMainView {

    @Override
    protected int setLayoutId() {
        return R.layout.activity_main;
    }

    @Override
    protected void initView() {

    }

    @Override
    protected void initData() {
        presenter.requestData();
    }

    @Override
    protected MainPresenter createPresenter() {
        return new MainPresenter();
    }

    @Override
    public void showData(List<String> list) {
        //显示信息
    }

    @Override
    public void showError() {
        //错误提示
    }
}
上一篇 下一篇

猜你喜欢

热点阅读