Java设计模式之模板方法设计模式
来源:互联网 发布:mac os x 10.12 cdr 编辑:程序博客网 时间:2024/05/19 13:08
1、运用
在定义功能时,功能的一部分是确定的,但是有一部分是不确定的,而确定的部分在使用不确定的部分,那么这时将不确定部分暴露出去,由该类的子类去完成。
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");
}
}
定义专门的子类来处理每种传输格式的具体逻辑,如定义子类XMLFormatter继承自Formatter,将Book对象以xml格式进行包装。
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;
}
}
定义类JSONFormatter继承自Formatter,里面加入处理JSON格式的具体逻辑:
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设计模式之模板方法模式
- Java设计模式之模板方法模式
- JAVA-设计模式之模板方法模式
- Java--设计模式之模板方法模式
- java设计模式之模板方法模式
- 《Java设计模式》之模板方法模式
- JAVA设计模式之:模板方法模式
- 【java】设计模式之模板方法模式
- java设计模式之模板方法模式
- Java设计模式之模板方法模式
- Java设计模式之模板方法模式
- Java设计模式之模板方法模式
- java设计模式之模板方法模式
- JAVA设计模式之模板方法模式
- java设计模式之模板方法模式
- java设计模式之模板方法模式
- 119.Binary Search Tree Iterator
- IOS 警告 汇总
- java生成图片验证码--公用
- 推荐几款git管理工具
- xml入门
- Java设计模式之模板方法设计模式
- 程序员技术练级攻略
- css中解决textarea高度随内容自适应的问题
- 日志拦截AOP,当执行抛异常时@AfterThrowing执行了没效果
- http://blog.csdn.net/welovesunflower/article/details/51202313
- 写给新手程序员的一封信
- Java设计模式之装饰模式
- hcatalog简介和使用
- Android 侧拉菜单时标题做动画