您的位置:首页 > 编程语言 > Java开发

Java设计模式之模板方法设计模式

2016-05-05 16:51 381 查看
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;

}

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: