mvc-mpv-mvvm思想实践

代码

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值