1、功能

定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤 。

2、模式中的角色

2.1 抽象类(AbstractClass):实现了模板方法,定义了算法的骨架。

2.2 具体类(ConcreteClass):实现抽象类中的抽象方法,已完成完整的算法。

3、案例说明

以查询账户余额为例

类AbstracBalanceImpl包含类两个属性

protected ITodayBalancePacker todayBalancePacker;

protected ITodayBalanceParser todayBalanceParser;

并且实现了接口IBalance的blance方法,该方法封装了主要的处理逻辑,也就是调用packTodayBalance方法封装好请求数据,然后发送网络请求,再调用parseTodayBalance 解析数据。

public BankBalanceResponse balance(BankBalanceRequest rqst)

{

String rqstStr = this.todayBalancePacker.packTodayBalance(rqst);

IConnection conn = getConnection(factory);

openConnection(conn);

----------请求服务

String rspStr = recv(is);

return this.todayBalanceParser.parseTodayBalance(rqst, rspStr);

}

-------------------------------------

以封装请求数据为例

类TodayBalancePacker 实现了ITodayBalancePacker 接口的packTodayBalance 方法。

public class TodayBalancePacker implements ITodayBalancePacker {

public String packTodayBalance(BankBalanceRequest rqst){

String rqstStr = 处理rqst方法封装成需要发送的数据

return rqstStr;

}

---------------------------------

解析返回数据和请求实现类似。

public class TodayBalanceParser implements ITodayBalanceParser {

@Override

public BankBalanceResponse parseTodayBalance(BankBalanceRequest rqst,  String rspStr)  {

BankBalanceResponse balanceRsp = new BankBalanceResponse();

...一系列逻辑处理

balanceRsp.setBalances(...);

return balanceRsp;

}

我们可以在 BalanceImpl 实现类去 实例化 todayBalancePacker和todayBalanceParser,当然,我们还可以在这里去初始化其他数据,必然ip 端口等,以便可以在AbstracBalanceImpl的balance 方法获取网络链接中使用。

public void _init() {

// TODO Auto-generated method stub

this.todayBalancePacker=new TodayBalancePacker();

this.todayBalanceParser=new TodayBalanceParser();

}

这样,我们也就很好的使用了模板模式来设计核心代码逻辑,并将具体的实现下放到子类中实现,实现了代码的解耦。

java 模板方法_Java设计模式21:模板方法(Template Method)相关推荐

  1. java tea bag_设计模式系列教程—Template Method Pattern(模板方法模式)

    9 Template Method Pattern(模板方法模式) 前言:封装步骤的算法. Vander作为老板,凡是亲力亲为,他新开了家咖啡店,这是他招牌咖啡卡布奇诺的冲泡方法: 1.把水煮沸 2. ...

  2. java view template_Java设计模式之模板方法模式(Template Method)

    本文继续介绍23种设计模式系列之模板方法模式. 概述 模板方法模式是类的行为模式.准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑.不同的子 ...

  3. 设计模式之略见一斑(Template Method模板方法模式)

    模板方法模式就是预先作好一个模板,开发者只要根据模板添加相应的业务实现,这个就是架构啦. 它有如下特点: 1.这个模板一般是个抽象类,抽象出子类中部分公共的方法,从而减轻子类的负担. 2.这个模板可能 ...

  4. java模板方法模式_java设计模式(模板方法模式)

    模板方法模式 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中. 模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤.通俗的说的就是有很多相同的步骤的,在某一些地方可能有一些差 ...

  5. 访问者模式的java语言_Java 设计模式系列(二三)访问者模式(Vistor)

    Java 设计模式系列(二三)访问者模式(Vistor) 访问者模式是对象的行为模式.访问者模式的目的是封装一些施加于某种数据结构元素之上的操作.一旦这些操作需要修改的话,接受这个操作的数据结构则可以 ...

  6. java圣经_Java设计模式圣经连载(01)-简单工厂模式[转载]

    简单工厂模式是类的创建,又叫静态工厂方法(Static Factory Methord)模式.简单工厂模式是由一个工厂对象决定创造哪一种产品类的实例. 1.1.1 工厂模式的几种形态 工厂模式专门负责 ...

  7. 装饰模式java咖啡_Java设计模式——装饰者模式

    概述: 本章可以称为"给爱用继承的人一个全新的设计眼界".我们即将再度探讨典型滥用问题.你将在本章学到如何使用对象组合的方式,做到在运行时装饰类.为什么呢?一旦你熟悉了装饰者的技巧 ...

  8. 访问者模式的java语言_Java 设计模式 之 访问者模式

    package com.visit.theory; import java.util.ArrayList; public class Test { public static void main(St ...

  9. 原型模式 java 深浅_JAVA设计模式---原型模式--浅客隆和深克隆

    JAVA浅克隆和深克隆 浅克隆:被复制对象的所有变量和原来相同,而所有的对其他对象的引用仍指向原对象.即如果复制的对象修改复制对象的变量,原对象不会改变.而修改引用的对象,二者均会发生改变. 深复制( ...

最新文章

  1. 专注NLP,竹间智能完成4500万美元B+轮融资
  2. phpmyadmin底部出现提示“The configuration file now needs a secret passphrase (blowfish_secret). ”...
  3. 《D3.js数据可视化实战手册》——2.5 使用子选择器
  4. BZOJ 2733 线段树的合并 并查集
  5. Java08-java语法基础(七)构造方法
  6. 30年技术积累,技术流RTC如何成为视频直播领域的黑马?
  7. Android手机截屏
  8. 关于sql备份到其他服务器的问题
  9. 20秋学期计算机应用基础在线作业3,电子科大16秋《计算机应用基础》在线作业3...
  10. java 发送 json数据_Java web中怎样取得Android通过post发送的json数据
  11. 【STM32】STM32CubeMX使用FreeRTOS教程1----定时器学习
  12. C++ 输出日志到 DbgView
  13. android水印的添加,Android添加水印的正确方法 只要三步!
  14. 带你了解Hook技术
  15. 前端做CRM管理系统是做什么_总结一下最近做crm客户管理系统使用到的前端知识点...
  16. GPU设备架构全面解析(持续更新ing)
  17. 赖世雄老师---名词性从句
  18. 要求返回三位数中的水仙花数 ,数字范围在100-999中。(水仙花数:百位数的3次方+十位数的3次方+个位数的三次方=数字本身)
  19. 第3课:郭盛华教学视频_PHP连接MySQL数据库的方法
  20. 纯CSS3画哆啦A梦

热门文章

  1. 期待鸿蒙是什么意思,如何看待华为将于 6月2 日举办鸿蒙发布会?你对此有哪些期待?...
  2. 使用 Visual Studio Code (VSCODE)写 C51 (持续更新 2018-04-09)
  3. mysql mariadb的VC客户端遇到的问题
  4. yarn========================(类似于node)
  5. 缓存2 动态缓存 memcached
  6. dede定义全局变量(include/common.inc.php)及调用方式
  7. Sql Server之数据类型详解
  8. oracel动态sql实例
  9. 视频分享|新冠肺炎疫情趋势预测大赛技术详解
  10. CV Code | 计算机视觉开源周报20191001期