模板设计之简单的购物流程

一、模板设计的概念

在生活中,制作不同的饮料虽然具体的实现过程不同,但是它们的大体流程都是一样的,都要经过烧水、把水倒入杯子里、主料放入杯子中、辅料放入杯子中等一系列流程。不同的饮料差别在于放的主料和辅料不同和是否烧水。因此在主类中,我们可以定义这一系列流程,以及它们共有方法的实现(如烧水、把水放到杯子里)。流程中的非共有的部分,可以定义为抽象方法,由子类具体实现。同时,还可以设置是否烧水这一属性,从而决定流程中是否要烧水。而在子类中,可以具体定义实现各自不同的部分。这一系列流程就是模板方法,显而易见,模板方法中定义了一套执行的逻辑顺序(算法)。

模板方法模式在书中的定义为:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。这里的一个方法就是主类中的模板方法,延迟到子类中的步骤就是主类中的抽象方法,子类各自不同的部分。

二、模板设计模式的代码形式

//主类
abstract class mainClass{//模板方法,通用流程,故用final修饰public final void templateMethods{//定义算法执行程序,可以采用一些流程控制this.methodOptional1();this.methodOptional2();//通过isSupport()控制流程if(this.isSupport()){this.methodOptional3();}this.methodOptional4();this.methodOptional5();}public final void methodOptional1(){//有模板提供了一定的默认实现,子类可以根据具体情况进行覆写。}public final void methodOptional2(){//有模板提供了一定的默认实现,子类可以根据具体情况进行覆写。}public final void methodOptional3(){//有模板提供了一定的默认实现,子类可以根据具体情况进行覆写。}public abstract void mathodOptional4();//由子类实现public abstract void mathodOptional5();//由子类实现public abstract boolean isSupport(){//根据具体要求设置,或者在子类中实现。}
}

三、简单的购物流程

网上购物一般要经过浏览商品、选择商品、客服咨询、配送、结算(使用积分、优惠券)、支付方式(支付宝、微信、银行卡、货到付款等)、查看订单这一系列流程。本文以京东购物和天猫购物为例,通过生活经验,我们可以分析出浏览商品、选择商品、查看订单为二者相同的步骤。京东和天猫的配送方式不同、支付方式不同。结算中是否使用优惠券,购物中是否咨询客服,这些可以通过属性值来设定。由此可以写出主类:

abstract class Shopping{private boolean isCallService=false;//默认不咨询客服private boolean isUseCoupon=true;//默认使用优惠券public void setIsUseCoupon(boolean isUseCoupon){this.isUseCoupon=isUseCoupon;}public void setCallService(boolean isCallService){this.isCallService=isCallService;}public final void shop(){this.lookUpGoods();this.selectGoods();if(this.isCallService) {this.consult();}this.dispatching();if(this.isUseCoupon) {this.balance();}this.payment();this.viewOrder();}public final void lookUpGoods(){System.out.println("1.浏览商品");}public final void selectGoods(){System.out.println("2.选择商品");}public abstract void consult();//客服咨询public abstract void dispatching();//配送public abstract void balance();//结算public abstract void payment();public void viewOrder(){System.out.println("7.查看订单");}
}
以及天猫类和京东类:
class Tmao extends Shopping{//客服咨询public void consult(){System.out.println("3.旺旺咨询");}//配送public void dispatching(){System.out.println("4.中通、圆通、百世汇通、申通、邮政配送");}//结算public void balance(){System.out.println("5.使用优惠券结算");}//支付public void payment(){System.out.println("6.余额宝、银行卡、花呗支付");}
}class JD extends Shopping{//客服咨询public void consult(){System.out.println("3.京东客服(机器人)");}//配送public void dispatching(){System.out.println("4.京东配送、店家配送");}//结算public void balance(){System.out.println("5.使用优惠券、京豆");}//支付public void payment(){System.out.println("6.微信支付、银行卡支付、京东白条支付");}
}

测试代码为:

public class Test{public static void main(String[] args) {Tmao t=new Tmao();t.setIsUseCoupon(false);t.setCallService(true);t.shop();System.out.println("-------------------------------");Tmao t2=new Tmao();t2.shop();//没有客服咨询,使用优惠券。System.out.println("-------------------------------");JD j=new JD();j.shop();}
}

最后的输出结果为:

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部