模板模式:提供通用模板,高度抽象将通用算法封装,暴露子类对象特有算法重写。简述直接上demo
子类2:
测试demo
运行结果:注意钩子方法使用,改变算法要求
通用模板类:
package com.coamc.android.api.template; /** * @version V:2.0.0 * @Title BankTe * @Package com.coamc.android.api.template * @Description: * @date 2016/9/18 11:11 */ public abstract class BankFlow { protected final void getMoney(){ inBank(); queue(); drawOutCash(); if (isRemark()){ remark(); } outBank(); } //钩子方案,处理不同客户不同行为需求 protected boolean isRemark(){ return true; } protected void remark(){ System.out.println("这个银行服务太好了"); } protected void queue(){ System.out.println("哥要排队了"); } protected abstract void drawOutCash(); protected void inBank(){ System.out.println("哥进银行了"); } protected void outBank(){ System.out.println("哥出银行了"); } }
package com.coamc.android.api.template; /** * @version V:2.0.0 * @Title ZhangSanTakeMoney * @Package com.coamc.android.api.template * @Description: * @date 2016/9/18 11:19 */ public class LisiTakeMoney extends BankFlow { @Override protected void drawOutCash() { System.out.println("四哥我要取1w块,哥就是没钱怎么了"); } }
子类2:
package com.coamc.android.api.template; /** * @version V:2.0.0 * @Title ZhangSanTakeMoney * @Package com.coamc.android.api.template * @Description: * @date 2016/9/18 11:19 */ public class ZhangSanTakeMoney extends BankFlow { @Override protected void drawOutCash() { System.out.println("三哥我要取10w块,我就是高富帅"); } @Override protected boolean isRemark(){ System.out.println("钩子方案,三哥就是不想评论!"); return false; } }
测试demo
package com.coamc.android.api.template; /** * @version V:2.0.0 * @Title TemD * @Package com.coamc.android.api.template * @Description: * @date 2016/9/18 11:08 */ public class TemD { public static void main(String[] args){ BankFlow zhangsan = new ZhangSanTakeMoney(); zhangsan.getMoney(); System.out.println("------------*****--------------"); BankFlow lisi = new LisiTakeMoney(); lisi.getMoney(); } }
运行结果:注意钩子方法使用,改变算法要求
哥进银行了 哥要排队了 三哥我要取10w块,我就是高富帅 钩子方案,三哥就是不想评论! 哥出银行了 ------------*****-------------- 哥进银行了 哥要排队了 四哥我要取1w块,哥就是没钱怎么了 这个银行服务太好了 哥出银行了
本文介绍了一种设计模式——模板模式,并通过一个银行取款流程的例子进行了详细解析。该模式定义了一个操作中的骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

5964

被折叠的 条评论
为什么被折叠?



