抽取基类框架

一:在之前写好bean类,然后定义接口封装网络工具

1.Api

接口有参数的写参数

public interface ILoginApi {
    @GET("user/login")
    Observable<LoginBean> login1(@Query("mobile") String mobile,@Query("password") String password);
}

没有参数的不写

@GET("home/getHome")
Observable<ShouBean> shouye();

2.网络请求工具类HttpUtils

public class HttpUtils {
    private static final String BASE_URL = "http://www.zhaoapi.cn/";
    private Retrofit retrofit;

    private static final class SINGLE_INSTANCE{
        private static final HttpUtils _INSTANCE = new HttpUtils();
    }

    public static HttpUtils getInstance(){
        return SINGLE_INSTANCE._INSTANCE;
    }

    private HttpUtils(){
        retrofit = new Retrofit.Builder()
                .baseUrl(BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .client(buildOkHttpClient())
                .build();
    }

    private OkHttpClient buildOkHttpClient() {
        return new OkHttpClient.Builder()
                .readTimeout(5000,TimeUnit.MILLISECONDS)
                .writeTimeout(5000,TimeUnit.MILLISECONDS)
                .build();
    }

    public <T> T create(Class<T> clazz){
        return retrofit.create(clazz);
    }
}

二:基类Base

1.BaseView

public interface BaseView {
    Context context();
}

2.BasePresenter

public abstract class BasePresenter<V extends BaseView> {
    protected V iView;

    public BasePresenter(){
        initModel();
    }

    public abstract void initModel();

    public void attach(V iView){
        this.iView = iView;
    }

    public void dettach(){
        this.iView = null;
    }

    protected Context context(){
        if (iView != null){
            return iView.context();
        }
        return null;
    }
}

3.BaseActivity

public abstract class BaseActivity<P extends BasePresenter> extends AppCompatActivity implements BaseView {

    protected P presenter;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(provideLayoutId());
        ButterKnife.bind(this);

        presenter = providePresenter();
        attachView();
        initView();
        initListener();
        initData();
    }

    private void attachView(){
        if (presenter != null){
            presenter.attach(this);
        }
    }

    protected  void initView(){

    }

    protected  void initListener(){

    }

    protected abstract void initData();

    protected abstract P providePresenter();

    protected abstract int provideLayoutId();

    @Override
    protected void onDestroy() {
        super.onDestroy();
        presenter.dettach();
    }
}

三:view层

public interface LoginView extends BaseView {
    void onSuccess(LoginBean loginBean);

    void onFailed(Throwable t);
}

四:model层

public class LoginModel {
    public Observable<LoginBean> login(String mobile,String password){
        ILoginApi iLoginApi = RetrofitManager.getInstance().create(ILoginApi.class);
        Observable<LoginBean> loginBeanObservable = iLoginApi.login1(mobile,password);
        return loginBeanObservable;
    }
}

五:presenter层

public class LoginPresenter extends BasePresenter<LoginView> {
    private LoginModel loginModel;

    @Override
    public void initModel() {
        loginModel = new LoginModel();
    }

    public void login(String mobile,String password){
        loginModel.login(mobile,password)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Consumer<LoginBean>() {
                    @Override
                    public void accept(LoginBean loginBean) throws Exception {
                        if (loginBean != null & "0".equals(loginBean.getCode())) {
                            if (iView != null)
                                iView.onSuccess(loginBean);
                            return;
                        }
                        if (iView != null)
                            iView.onFailed(new Throwable("服务未响应"));
                    }
                }, new Consumer<Throwable>() {
                    @Override
                    public void accept(Throwable throwable) throws Exception {
                        if (iView != null)
                            iView.onFailed(new Throwable("网络异常"));
                    }
                });
    }
}

六:Mainactivity层

public class MainActivity extends BaseActivity<LoginPresenter> implements LoginView {

    @BindView(R.id.ed_name)
    EditText edName;
    @BindView(R.id.ed_password)
    EditText edPassword;
    @BindView(R.id.btn_login)
    Button btnLogin;

    @Override
    protected void initData() {

    }

    @Override
    protected LoginPresenter providePresenter() {
        return new LoginPresenter();
    }

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


    @Override
    public void onSuccess(LoginBean loginBean) {
        Log.e("aaaaaaa", loginBean.getData().getUsername());
        Toast.makeText(MainActivity.this, "请求成功", Toast.LENGTH_LONG).show();
    }

    @Override
    public void onFailed(Throwable t) {
        Toast.makeText(MainActivity.this, "请求失败", Toast.LENGTH_LONG).show();
    }

    @Override
    public Context context() {
        return this;
    }

    @OnClick(R.id.btn_login)
    public void onViewClicked() {
        String trim = edName.getText().toString().trim();
        String pass = edPassword.getText().toString();
        presenter.login(trim,pass);
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是使用多态实现四则运算系统的抽象基类框架: ```c++ class AbstractCalculator { public: virtual double calculate(double num1, double num2) = 0; }; class AddCalculator : public AbstractCalculator { public: double calculate(double num1, double num2) override { return num1 + num2; } }; class SubCalculator : public AbstractCalculator { public: double calculate(double num1, double num2) override { return num1 - num2; } }; class MulCalculator : public AbstractCalculator { public: double calculate(double num1, double num2) override { return num1 * num2; } }; class DivCalculator : public AbstractCalculator { public: double calculate(double num1, double num2) override { if (num2 == 0) { throw std::invalid_argument("division by zero"); } return num1 / num2; } }; ``` 以上代码定义了一个抽象基类 `AbstractCalculator`,它包含了一个纯虚函数 `calculate`,用于计算两个数的结果。然后我们定义了四个具体的实现类 `AddCalculator`、`SubCalculator`、`MulCalculator` 和 `DivCalculator`,分别对应加法、减法、乘法和除法的计算方法。 这样,我们就可以通过多态来实现四则运算系统了。比如,我们可以这样使用: ```c++ double num1 = 10.0, num2 = 5.0; AbstractCalculator* pAdd = new AddCalculator(); AbstractCalculator* pSub = new SubCalculator(); AbstractCalculator* pMul = new MulCalculator(); AbstractCalculator* pDiv = new DivCalculator(); std::cout << "num1 + num2 = " << pAdd->calculate(num1, num2) << std::endl; std::cout << "num1 - num2 = " << pSub->calculate(num1, num2) << std::endl; std::cout << "num1 * num2 = " << pMul->calculate(num1, num2) << std::endl; std::cout << "num1 / num2 = " << pDiv->calculate(num1, num2) << std::endl; delete pAdd; delete pSub; delete pMul; delete pDiv; ``` 输出结果为: ``` num1 + num2 = 15 num1 - num2 = 5 num1 * num2 = 50 num1 / num2 = 2 ``` 当然,这只是一个简单的例子,实际应用中可能需要更加复杂的计算方法和数据类型,但是使用多态的思想仍然是一样的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值