模版方法模式

来源:互联网 发布:画卡通人物的软件 编辑:程序博客网 时间:2024/06/07 06:08

模版方法模式:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中,模版方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。

模版就是一个方法,确切的来说,这个方法将算法定义成一组步骤,其中的任何步骤都可以是抽象的,由子类负责实现。这可以确保算法的结构保持不变,同时由子类提供部分实现。

[]类图

这里写图片描述

[]模版方法模式的实现

抽象类

public abstract class CaffeineBeverage {/** * 模版方法 */public final void prepareRecipe() {    boilWater();    brew();    pourInCup();    if (customerWantsCondiments()) {        addCondiments();    }}abstract void brew();abstract void addCondiments();protected final void boilWater() {    System.out.println("Boiling water");}protected final void pourInCup() {    System.out.println("Pouring into cup");}/** * 钩子方法 * * @return */protected boolean customerWantsCondiments() {    return false;}}

实现类

public class Tea extends CaffeineBeverage {@Overridevoid brew() {    System.out.println("Steeping the tea");}@Overridevoid addCondiments() {    System.out.println("Adding Lemon");}}

实现类

public class Coffee extends CaffeineBeverage {@Overridevoid brew() {    System.out.println("Dripping Coffee through filter");}@Overridevoid addCondiments() {    System.out.println("Adding Sugar and Milk");}@Overrideprotected boolean customerWantsCondiments() {    return true;}}

测试

public static void main(String args[]) {    Tea tea = new Tea();    tea.prepareRecipe();    System.out.println("****************");    Coffee coffee = new Coffee();    coffee.prepareRecipe();}

[]
()模版方法定义类一个算法的步骤,并允许子类为一个或多个步骤提供实现。
()模版方法提供一个框架,父类专注在算法本身,而由子类提供完整的实现。
()钩子是一种被声明在抽象类中的方法,但只有空的或者默认实现,钩子的存在,可以让子类有能力对算法的不同进行挂钩,要不要挂钩,由子类自行决定。
()当你的子类必须提供算法中的某个方法或步骤的实现时,就使用抽象方法。如果算法的这个部分是可选的,就用钩子,如果是钩子的话,子类可以选择实现这个钩子,但并不强制这么做。
()钩子的目的:可以让子类实现算法中可选的部分,或者在钩子对于子类的实现并不重要的时候,子类可以对此钩子置之不理。还可以作为条件控制,影响父类的算法步骤。
()工厂方法是模版方法的一种特殊版本。
()一般具有生命周期的行为都有采用模版方法模式。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 微信银行卡注销零钱没了怎么办 贴小广告电话被城管上报停机怎么办 没有id密码怎么办已经锁死了屏幕 电信电话卡注销了里面的钱怎么办 支付宝绑定的手机号成空号了怎么办 支付宝绑定的手机号空号了怎么办 支付宝绑定的手机号码空号了怎么办 注册支付宝的手机号成空号了怎么办 银行保本理财回执单丢了怎么办 电脑连不上网ip地址错误怎么办 邮箱填错了没收到面试通知怎么办 电信烽火网络机顶盒零配置中怎么办 专技天下学错科目了怎么办 注册公司行业大类选错了怎么办 私营企业开的车比领导好怎么办 有公司有商标无生产资质怎么办 天猫店铺使用商标被注销怎么办 入仓件快递员搞错入仓号怎么办 商标注册证盖了自己公司的章怎么办 普通机打发票作废票丢了怎么办 淘宝店铺被买家投诉工商介入怎么办 淘宝退货运单号填错了怎么办 微信没有绑手机号密码忘了怎么办 淘宝联盟账号和密码忘记了怎么办 社保用户名和密码都忘记了怎么办 江西银行网银用户名忘了怎么办 邮政银行网银登录密码忘了怎么办 建行网银支付密码忘了怎么办 建行手机网银登录密码忘了怎么办 特岗教师忘记用户名和密码怎么办 特岗教师用户名和密码忘了怎么办 电信登录用户名和密码忘记了怎么办 电脑登录用户名和密码忘了怎么办 电脑网络用户名忘了连不上网怎么办 微博忘记登录名怎么办只记得昵称 买房子付了首付现在要退房怎么办 玩lol延迟高怎么办但网速没问题 中维世纪监控密码忘记了怎么办 原店主营业执照不注销怎么办新的 苹果手机铃声调到最大还小怎么办 投标时措施费忘记套价了怎么办