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();
}

猜你喜欢

转载自blog.csdn.net/qq_45506643/article/details/107382597