引言
模版方法是一种行为设计模式, 它在基类中定义了一个算法的框架, 允许子类在不修改结构的情况下重写算法的特定步骤。
Java语言
使用示例: 模版方法模式在 Java 框架中很常见。 开发者通常使用它来向框架用户提供通过继承实现的、 对标准功能进行扩展的简单方式。
这里是一些核心 Java 程序库中模版方法的示例:
•java.io. Inputstream、java.io.writer 、java.io.Dutputstream、java. io .Reader的所有非抽象方法。
•java.util. Abstractlist、 java.util.Abstractset 和java.util.AbstractMap
的所有非抽象方法。
•javax.servlet.http.Httpservlet,所有默认发送 HTTP 405“方法不允许”错误响应的
doxxx()方法。你可随时对其进行重写。
识别方法: 模版方法可以通过行为方法来识别, 该方法已有一个在基类中定义的 “默认” 行为。
重写算法的标准步骤
在本例中, 模版方法模式定义了一个可与社交网络协作的算法。 与特定社交网络相匹配的子类将根据社交网络所提供的 API 来实现这些步骤。
networks
networks/Network.java: 基础社交网络类
/*** Base class of social network.*/
public abstract class Network {String userName;String password;Network() {}/*** Publish the data to whatever network.*/public boolean post(String message) {// Authenticate before posting. Every network uses a different// authentication method.if (logIn(this.userName, this.password)) {// Send the post data.boolean result = sendData(message.getBytes());logOut();return result;}return false;}abstract boolean logIn(String userName, String password);abstract boolean sendData(byte[] data);abstract void logOut();
}
networks/Facebook.java: 具体社交网络
/*** Class of social network*/
public class Facebook extends Network {public Facebook(String userName, String password) {this.userName = userName;this.password = password;}public boolean logIn(String userName, String password) {System.out.println("\nC