关于“策略模式”与“MVP风格”的联系理解心得

近日,重新接触到“MVP”这个词,然后百度搜索了一遍,重新找到鸿洋大神的关于MVP的帖子:浅谈 MVP in Android,看了并对照着敲了一下,有一点自己的心得,后来晚上翻看了一下《大话设计模式》这本书,重新看一下,突然发现““策略模式”与“MVP风格”竟然有一些相同的地方,通过“MVP风格”来理解一直看不是很明白的“策略模式”,居然很好明白了,于是现在写下来,就当自己的笔记了。


首先简单介绍一下MVP风格。

MVP风格:

Model         : 模型+业务逻辑,包括接口+具体实现;用接口是为了其继承性,而具体实现则是实现接口,并实现具体方法。需要实现哪些方法,根据具体的业务实现。

View            : 视图,只有接口;首先根据视图拥有哪些组件,直接从组件可以获得什么信息,并根据此写方法。

Presenter  : 主持人(直接翻译的,实在找不到合适的解释,英语渣,╮(╯_╰)╭),只有具体实现。参照Model和View来具体实现。


分类大概是这么个样子:



MVP风格,其实就是把“V视图”和“M业务逻辑”更好地分离开来,然后通过“P”作为中间人对V和M进行联系,而V和M不直接进行联系。

举个例子:(额。。。不举例子了,具体例子,还是看鸿洋大神的吧:再次传送门

然后策略模式大概也是这样的思想:

例如:实现一个计算器。

1、首先抽象出一个Operate类,拥有其抽象方法getCalResult(int on1, int on2),传入参数是参与计算的操作数1和操作数2。

Operate.class

public abstract class Operate {
	
	public abstract int getResult(int num1, int num2);
	
}

2、实现具体操作类OperateAdd和OperateMin,并继承Operate类,实现各自的getCalResult(int on1, on2)的具体方法。

OperateAdd.class

public class OperateAdd extends Operate {
	
	@Override
	public int getResult(int num1, int num2) {
	<span style="white-space:pre">	</span>return num1+num2;
	}

}

OperateMin.class

public class OperateMinus extends Operate {
	
<span style="white-space:pre">	</span>@Override
<span style="white-space:pre">	</span>public int getResult(int num1, int num2) {
		return num1-num2;
	}

}


PS : 其实,Operate就相当于是接口,而OperateAdd和OperateMinus就相当于是具体实现,而两者一起,就相当于是Model。


3、实现M和V的连接枢纽Presenter---OperatePresenter。

OperatePresenter.class

public class OperatePresenter {
	
	private Operate mOperate = null;
	
	public OperatePresenter(String strOper) {  /* 根据操作符,自动选择计算方法 */
		switch(strOper){
		case "+":
			mOperate = new OperateAdd();
			break;
		case "-":
			mOperate = new OperateMinus();
			break;
		}
	}
	
	public int getCalResult(int num1, int num2){
		return mOperate.getResult(num1, num2);
	}
	
}

4、最后,在View中生成Presenter对象,并在对应位置调用getCalResult方法,并传入通过View获取到的操作数1和操作数2即可获得结果。

public class Test {
	public static void main(String[] args) {

		OperatePresenter mOPAdd = new OperatePresenter("+");
		System.out.println("0 + 5 = "+mOPAdd.getCalResult(0, 5));
		
		OperatePresenter mOPMin = new OperatePresenter("-");
		System.out.println("10 - 3 = "+mOPMin.getCalResult(10, 3));
	}
}


最后,得出的结果就是:



全文总结:MVP风格 和 策略模式 在代码风格上,都是差不多的:Model(接口/抽象:Operate,具体实现:OperateAdd,OperateMinus),View(抽象:上例没有用到),Presenter(具体实现:OperatePresenter),同样是做到了业务逻辑与界面的分离(因为在View中,只有Presenter参与到里面,而业务逻辑OperateAdd和OperateMinus,以及其父类Model都与View无关)。当然也有些许的差别,但是总的来说还是差不多的。当我看完鸿洋大神的浅谈MVP,再看策略模式的时候,通过MVP来理解策略模式,居然看懂了(之前一头雾水),因此写下这篇博客,就当做是用来记录一下,也方便自己以后看吧。偷懒了,写得不好,请见谅。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值