Mvc模式广泛应用与各种面向对象的编程之中,但是偶然间接触到mvp模式 m-model ,是指模型,v -view 是指视图,p-presenter 英文意为 主持人,演讲者,
其实mvp模式很简单,他是将多个model和多个view 集中集合封装在presenter中处理,让我们来看一个实例:我们要做一个业务,就是不论客户是买家具 买化妆品 还是买其他东西,都先要办理会员卡,那么我们将办理会员卡这个共同的点放在presenter当中,
public interface IPresenter {
public void 办理会员卡();
}
public interface 顾客{
public void 买东西():
}
public abstract class Presenter implements IPresenter {
private 顾客 顾客a;
public Presenter (顾客){
顾客a=顾客;
}
public void 超市买东西(){
办理会员卡();//这里是公用部分
顾客a.买东西();
}
public void 办理会员卡(){
system.out("办理会员卡");
}
}
这样 如果家庭主妇顾客买东西了
家庭主妇顾客 impleement 顾客 {
@overide
public void 买东西(){
system.out("买菜");
}
}
在main函数中写
家庭主妇顾客 A=new 家庭主妇顾客();
Presenter p=new Prestener(A);
p.超市买东西();
如果是另一种顾客 比如公司顾客
公司顾客 impleement 顾客 {
@overide
public void 买东西(){
system.out("买办公用品");
}
}
上面是实现 下面是执行
公司顾客 b=new 公司顾客();
Presenter p=new Prestener(B);
p.超市买东西();
在Presenter的超市买东西函数中就调用了顾客的买东西方法,并且在这之前都办理了会员卡 下一个国外客户也是new一下然后当作Presenter的构造参数传进去,所有的共同的方法都在Presenter中处理了,这样以后遇到需求 美国客户自己写一个办理会员卡再购物之类的就不用在美国客户里面写办理会员卡的方法了,而且如果在办理会员卡之前要增加实名认证方法,直接在Presenter里面加,不用美国写一个实名认证 中国写一个实名认证,以色列搞一个 ,法国搞一个,调用的时候还得 美国顾客.实名认证(); 中国顾客.实名认证();法国顾客.实名认证(); 直接在Presenter的超市买东西方法中最前面添加一个顾客.实名认证();就像这样
public abstract class Presenter implements IPresenter {
private 顾客 顾客a;
public Presenter (顾客){
顾客a=顾客;
}
public void 超市买东西(){
实名认证();//----------------------------------增加部分
办理会员卡();
顾客a.买东西();
}
public void 办理会员卡(){
system.out("办理会员卡");
}
public void 实名认证(){ //----------------------------------增加部分
system.out("实名认证");//----------------------------------增加部分
} //----------------------------------增加部分
}
注意 :把Prestener弄成abstract,方便以后出现多种方式的分化,比如实名认证有手机认证和身份证认证
让实名认证方法定义为abstract方法 让子类实现
说到底 mvp就是把部分相同部分集中在一个中心 不同的东西分化出去,其中利用的还是接口的泛化作用 ,不懂泛化作用的可以看我的另一篇博客
http://blog.youkuaiyun.com/huangjunjie1991/article/details/71079678