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