Java设计模式之模板方法设计模式
2016-05-05 16:51
381 查看
1、运用
在定义功能时,功能的一部分是确定的,但是有一部分是不确定的,而确定的部分在使用不确定的部分,那么这时将不确定部分暴露出去,由该类的子类去完成。
2、创建模板模式步骤
1)定义一个(或者多个)抽象方法,让子类去实现;
2)定义并实现一个模板方法,在模板方法中调用抽象方法;
3)创建抽象类的子类,实现对应的抽象方法。
3、示例:
有如下需求:想在服务器端增加一个新功能,希望写一个方法,能对Book对象进行处理,将Book对象的所有字段以XML格式进行包装,这样以后可以方便与客户端进行交互。
为便于代码的扩展性,便于后期的升级维护,可以使用模板方法设计模式。因为后期可能有新需求,将Book对象以json格式进行包装,这样就可以针对不同的要求,由不同的子类去实现。
定义含模板方法的抽象类
定义专门的子类来处理每种传输格式的具体逻辑,如定义子类XMLFormatter继承自Formatter,将Book对象以xml格式进行包装。
定义类JSONFormatter继承自Formatter,里面加入处理JSON格式的具体逻辑:
在定义功能时,功能的一部分是确定的,但是有一部分是不确定的,而确定的部分在使用不确定的部分,那么这时将不确定部分暴露出去,由该类的子类去完成。
2、创建模板模式步骤
1)定义一个(或者多个)抽象方法,让子类去实现;
2)定义并实现一个模板方法,在模板方法中调用抽象方法;
3)创建抽象类的子类,实现对应的抽象方法。
3、示例:
有如下需求:想在服务器端增加一个新功能,希望写一个方法,能对Book对象进行处理,将Book对象的所有字段以XML格式进行包装,这样以后可以方便与客户端进行交互。
为便于代码的扩展性,便于后期的升级维护,可以使用模板方法设计模式。因为后期可能有新需求,将Book对象以json格式进行包装,这样就可以针对不同的要求,由不同的子类去实现。
定义含模板方法的抽象类
public abstract class Formatter { public String formatBook(Book book, int format) { beforeFormat(); String result = formating(book); afterFormat(); return result; } protected void beforeFormat() { System.out.println("format begins"); } protected abstract String formating(Book book); protected void afterFormat() { System.out.println("format finished"); } } |
public class XMLFormatter extends Formatter { @Override protected String formating(Book book) { String result = ""; result += "<book_name>" + book.getBookName() + "</book_name>\n"; result += "<pages>" + book.getPages() + "</pages>\n"; result += "<price>" + book.getPrice() + "</price>\n"; result += "<author>" + book.getAuthor() + "</author>\n"; result += "<isbn>" + book.getIsbn() + "</isbn>\n"; return result; } } |
public class JSONFormatter extends Formatter { @Override protected String formating(Book book) { String result = ""; result += "{\n"; result += "\"book_name\" : \"" + book.getBookName() + "\",\n"; result += "\"pages\" : \"" + book.getPages() + "\",\n"; result += "\"price\" : \"" + book.getPrice() + "\",\n"; result += "\"author\" : \"" + book.getAuthor() + "\",\n"; result += "\"isbn\" : \"" + book.getIsbn() + "\",\n"; result += "}"; return result; } } |
相关文章推荐
- JAVA并发编程实战---第二章:线程安全性
- Java设计模式之缺省模式
- Java 关于加密哪些事儿
- SpringMVC拦截器2(资源和权限管理)(作为补充说明)
- Spring AOP术语
- Java基础系列--包装类
- Java设计模式之适配器模式
- java中float与byte[]的互转
- Java设计模式之单例模式
- java深度问题
- eclipse maven plugin 插件 离线安装 和 配置
- Spring源码下载
- leetcode Multiply Strings 字符串的乘积问题
- spring mvc +freemarker不错的mvc搭配
- springmvc中操作json,配置FastJson
- 【行为型模式】责任链模式(chain of responsibility)之23种java设计模式
- struts2学习---struts2常用标签(上)
- Spring Mvc4.2学习笔记-第一节 spring mvc对比struts2优势
- java log4j 日志
- Fragment下listview item设置fragment,