Unity MVP框架理解

Unity MVP框架理解

MVP结构
MVP基本模块

一个p层去持有多个model方案,只有Presenter层需要特殊处理

public class MoreModelPresenter implements MoreModelContract.Presenter {

    private MoreModelContract.OneModel oneModel;
    private MoreModelContract.TwoModel twoModel;
    private MoreModelContract.ThreeModel threeModel;
    private MoreModelContract.View view;

    public MoreModelPresenter(MoreModelContract.OneModel oneModel, MoreModelContract.TwoModel twoModel, MoreModelContract.ThreeModel threeModel, MoreModelContract.View view) {
        this.oneModel = oneModel;
        this.twoModel = twoModel;
        this.threeModel = threeModel;
        this.view = view;
    }


    @Override
    public void getData1() {
        view.showData1(oneModel.doDataOne());
    }

    @Override
    public void getData2() {
        view.showData1(twoModel.doDataTwo());
    }

    @Override
    public void getData3() {
        view.showData1(threeModel.doDataThree());
    }
}

单V多p多m架构

public class MainActivity extends AppCompatActivity implements MorePresenterContract.View {

    private MorePresenterOne morPresenterOne;
    private MorePresenterTwo morePresenterTwo;

    @Override

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        morPresenterOne = new MorePresenterOne(MorePresenterModelOne.getInstance(), this);
        morePresenterTwo = new MorePresenterTwo(MorePresenterModelTwo.getInstance(), this);

        findViewById(R.id.button1).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                morPresenterOne.getData1();
            }
        });

        findViewById(R.id.button2).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                morePresenterTwo.getData2();
            }
        });

    }

    @Override
    public void showData1(String str) {
        Toast.makeText(this,str,Toast.LENGTH_SHORT).show();
    }

    @Override
    public void showData2(String str) {
        Toast.makeText(this,str,Toast.LENGTH_SHORT).show();
    }
}


//mvp接口类
public interface MorePresenterContract {
    interface View {
        //显示数据
        void showData1(String str);
        void showData2(String str);

    }

    interface PresenterOne {
        //通知model要获取数据并把model返回的数据交给view层
        void getData1();

    }

    interface PresenterTwo {
        //通知model要获取数据并把model返回的数据交给view层
        void getData2();

    }

    interface ModelOne {
        //获取数据
        String doData1();

    }

    interface ModelTwo {
        //获取数据
        String doData2();

    }
}



//第一个p
public class MorePresenterOne implements MorePresenterContract.PresenterOne {

    private MorePresenterContract.ModelOne modelOne;
    private MorePresenterContract.View view;

    public MorePresenterOne(MorePresenterContract.ModelOne modelOne, MorePresenterContract.View view) {
        this.modelOne = modelOne;
        this.view = view;
    }

    @Override
    public void getData1() {
        view.showData1(modelOne.doData1());
    }
}



//第二个p
public class MorePresenterTwo implements MorePresenterContract.PresenterTwo {
    private MorePresenterContract.ModelTwo modelTwo;
    private MorePresenterContract.View view;

    public MorePresenterTwo(MorePresenterContract.ModelTwo modelTwo, MorePresenterContract.View view) {
        this.modelTwo = modelTwo;
        this.view = view;
    }

    @Override
    public void getData2() {
        view.showData2(modelTwo.doData2());
    }
}

//model就是普通写法
public class MorePresenterModelOne implements MorePresenterContract.ModelOne {
    private static MorePresenterModelOne morePresenterModelOne;

    public static MorePresenterModelOne getInstance() {
        if (morePresenterModelOne == null) {
            morePresenterModelOne = new MorePresenterModelOne();
        }
        return morePresenterModelOne;
    }

    @Override
    public String doData1() {
        return "MorePresenterModelOne";
    }
}

model模块拆分,将大量复用的model单独拆分出来,让这个model可以去被其他model调用

public interface ModelIncludeModeContract {

    interface View {
        //显示数据
        void showData(String str);

    }

    interface Presenter {
        //通知model要获取数据并把model返回的数据交给view层
        void getData();

    }

    interface Model {
        //获取数据
        String doOtherDataOne();
        //
        String doOtherDataTwo();

    }

}


public class OneModelIncludeOther implements ModelIncludeModeContract.Model {

    private IOtherMode otherMode;
    private IOtherModeTwo otherModeTwo;
    /主model使用时去初始化其他子model,让主model可以调用子model的方法
    public OneModelIncludeOther(IOtherMode otherMode, IOtherModeTwo otherModeTwo) {
        this.otherMode = otherMode;
        this.otherModeTwo = otherModeTwo;
    }

    @Override
    public String doOtherDataOne() {
        return otherMode.otherData();
    }

    @Override
    public String doOtherDataTwo() {
        return otherModeTwo.otherDataTwo();
    }
}



//第一个子model的接口类
public interface IOtherMode {

    String otherData();
}


//第二个子model的接口类
public interface IOtherModeTwo {

    String otherDataTwo();
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值