模板模式:提供通用模板,高度抽象将通用算法封装,暴露子类对象特有算法重写。简述直接上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块,哥就是没钱怎么了 这个银行服务太好了 哥出银行了