代码
package test2;
import test2.MvvmTest.Mvvm.Buider;
public class Mvcs {
public static void main(String[] args) {
System.out.println("代码实践");
println("mvc:");
MvcTest mvc = new MvcTest();
mvc.use();
println("mvp:");
MpvTest mpv = new MpvTest();
mpv.use();
println("mvvm:");
MvvmTest mvvm = new MvvmTest();
mvvm.use();
}
static public void println(String str) {
System.out.println(str);
}
}
class MyModel{
int a = 1;
int b = 2;
}
class MyDataBase2{
MyModel[] MyModels = new MyModel[1];
MyDataBase2() {
MyModels[0] = new MyModel();
}
MyModel getModel(int id){
return MyModels[id];
}
void update(MyModel myMode) {
MyModels[0].a = myMode.a;
MyModels[0].b = myMode.b;
}
}
interface IView{
void clickButton();
//void view(MyModel m);
}
class MvcTest{
void use() {
View v = new View();
v.clickButton();
}
class View implements IView{
MyModel model;
Controler controler = new Controler();
public void clickButton() {
model = controler.get(0);
view(model);
}
public void view(MyModel m) {
System.out.println("a:"+m.a+" b:"+m.b);
}
}
class Controler{
MyDataBase2 db = new MyDataBase2();
MyModel get(int id) {
return db.getModel(id);
}
}
}
class MpvTest{
public void use() {
View v = new View();
v.clickButton();
}
class View implements IView{
Presenter presenter = new Presenter();
View(){
presenter.view = this;
}
public void clickButton() {
presenter.view(0);
}
public void view(MyModel model) {
System.out.println("a:"+model.a+" b:"+model.b);
}
}
class Presenter{
MyDataBase2 db = new MyDataBase2();
View view;
void view(int id) {
view.view(db.getModel(id));
}
}
}
class MvvmTest{
public void use() {
View view = new View();
view.view();
view.inputA(3);
view.view();
view.inputB(4);
view.view();
}
class View implements IView{
Mvvm mvvm;
ViewModel viewModel = new ViewModel();
View(){
mvvm = new Mvvm(this);
}
public void clickButton() {
mvvm.view(0);
}
public void clickUpdate() {
mvvm.update();
}
public void inputA(int a) {
viewModel.setInputa(a);
}
public void inputB(int b) {
viewModel.setInputb(b);
}
public void view() {
System.out.println("a:"+viewModel.inputa+" b:"+viewModel.inputb);
}
class ViewModel{
Buider buider;
private int inputa;
private int inputb;
public void setInputa(int inputa) {
if(this.inputa != inputa) {
this.inputa = inputa;
buider.setInputa(inputa);
}
}
public void setInputb(int inputb) {
if(this.inputb!= inputb) {
this.inputb = inputb;
buider.setInputb(inputb);
}
}
}
}
class MvvmModel extends MyModel{
Buider buider;
public void setA(int a) {
if(this.a != a) {
this.a = a;
buider.setA(a);
}
}
public void setB(int b) {
if(this.b!= b) {
this.b = b;
buider.setB(b);
}
}
public void initData(MyModel m) {
setA(m.a);
setB(m.b);
}
}
class Mvvm{
MyDataBase2 db = new MyDataBase2();
MvvmModel mvvmModel = new MvvmModel();
View view;
Buider buider = new Buider();
Mvvm(View view){
this.view = view;
view.viewModel.buider = buider;
mvvmModel.buider= buider;
buiderData();
}
public void buiderData() {
MyModel mm = db.getModel(0);
mvvmModel.initData(mm);
}
class Buider{
public void setInputa(int inputa) {
mvvmModel.setA(inputa);
}
public void setInputb(int inputb) {
mvvmModel.setB(inputb);
}
public void setA(int a) {
view.viewModel.setInputa(a);
}
public void setB(int b) {
view.viewModel.setInputb(b);
}
}
void view(int id) {
MyModel mm = db.getModel(0);
mvvmModel.initData(mm);
view.view();
}
void view() {
view.view();
}
void update() {
db.update(mvvmModel);
}
}
}
运行效果
mvc:set/get
get
set
通过上面的两个逻辑,发现如果get和set都有view发起的话,那么mvc的set过程是不需要m参与的。
如果view知道数据更新了,set后在去get就可以了
但是通常的情况下我们为了 效率,往往会set之后,直接get,情形如下
通常的情况下,都入上边那样,set之后一般都要通过get表现出来的,就变成了上面的一种set和get结合的mva流程。
而有些情况,set和get能影响的并不是一个视图,比如添加完成后通常会跳转到list页。这样往往会出现多组mvc共同的情况
mvc/mvp