模板方法模式
来源:互联网 发布:淘宝网已买到的宝贝 编辑:程序博客网 时间:2024/06/06 01:41
前言
这设计模式法是最熟悉的了,搞过SDK接入的烂熟于心
模板方法模式
总体结构
abstracttemplateMethod: 抽象模板类,基本上包含固定的调用方法和一些留给子类扩展的抽象方法
ps:以下代码就以SDK接入为例
public abstract class AbstractTemplate { public final void working(){ init(); beginLogin(); beginPay(); endDoSomething(); } protected void init(){ System.out.println("本地初始化开始"); realinit(); } public abstract void realinit(); protected void beginLogin(){ System.out.println("本地登录开始"); realLogin(); } public abstract void realLogin(); protected void beginPay(){ System.out.println("本地支付开始"); realPay(); } public abstract void realPay(); protected void endDoSomething(){ System.out.println("流程结束"); System.out.println("__________________________________"); }}
channel: 接入的各种渠道
public class AliChannel extends AbstractTemplate { @Override public void realinit() { System.out.println("支付宝渠道初始化"); } @Override public void realLogin() { System.out.println("支付宝渠道登录"); } @Override public void realPay() { System.out.println("支付宝渠道支付"); }}
public class WechatChannel extends AbstractTemplate { @Override public void realinit() { System.out.println("微信渠道初始化"); } @Override public void realLogin() { System.out.println("微信渠道登录"); } @Override public void realPay() { System.out.println("微信渠道支付"); }}
public class BaiduChannel extends AbstractTemplate { @Override public void realinit() { System.out.println("百度渠道初始化"); } @Override public void realLogin() { System.out.println("百度渠道登录"); } @Override public void realPay() { System.out.println("百度渠道支付"); }}
common: 统一调用的部分,不属于模板方法的类,只是为了更好写调用。
public class TemplateCommon { private static TemplateCommon mInstance; private TemplateCommon(){} public static TemplateCommon getInstance(){ if(mInstance==null){ synchronized (TemplateCommon.class){ if (mInstance==null){ mInstance=new TemplateCommon(); } } } return mInstance; } public void begin(AbstractTemplate template){ template.working(); }
main调用:
//模板方法模式测试方法 public static void testTemplateMethod(){ AliChannel aliChannel=new AliChannel(); WechatChannel wechatChannel=new WechatChannel(); BaiduChannel baiduChannel=new BaiduChannel(); TemplateCommon.getInstance().begin(aliChannel); TemplateCommon.getInstance().begin(wechatChannel); TemplateCommon.getInstance().begin(baiduChannel); }
输出结果:
本地初始化开始支付宝渠道初始化本地登录开始支付宝渠道登录本地支付开始支付宝渠道支付流程结束__________________________________本地初始化开始微信渠道初始化本地登录开始微信渠道登录本地支付开始微信渠道支付流程结束__________________________________本地初始化开始百度渠道初始化本地登录开始百度渠道登录本地支付开始百度渠道支付流程结束__________________________________
个人总结
搞过SDK开发的都用过,基本上是在拥有固定的流程,又要面临很多不同的分支的时,可以把固定的流程写在抽象类里面,不同的分支的不同之处留给分支的之类自己处理。
阅读全文
0 0
- 深入浅出模板方法模式
- 模板方法模式
- 模板方法模式
- 模板方法模式
- 模板方法设计模式
- 模板方法模式
- 模板方法模式
- 模板方法模式
- 模板方法模式
- 模板方法模式
- 模板方法模式
- 模板方法模式
- 模板方法模式
- 模板方法模式
- TemplateMethod模板方法模式
- 模板方法模式
- 模板方法模式
- 模板方法模式
- 学习网络通信框架
- 我所理解的大学-好友问答
- 操作系统
- Linux用户和文件权限管理
- 单链表及系列操作
- 模板方法模式
- Java String内存模型
- grep 命令系列:grep 中的正则表达式
- 2018笔试题——求一元一次方程的解
- 剑指offer 2 替换空字符串
- 解决jparepository.saveandflush插入不保存的情况
- Dell precision 5520工作站Ubuntu系统安装
- Git学习笔记--基础知识
- 在 Ubuntu 16.04 上安装 Bro 网络分析器