模板方法模式,一般是为了统一子类的算法实现步骤,所使用的一种手段或者说是方式。它在父类中定义一系列算法的步骤,而将具体的实现都推迟到子类。
1.构建创建网页的接口
package com.md.template;
public interface PageHtmlGz {
String buldHtml();
}
2.构建一个抽象类去继承这个接口 、因为java是单继承
package com.md.template;
public abstract class BuildHtml implements PageHtmlGz {
private StringBuffer stringBuffer = new StringBuffer();
@Override
public String buldHtml() {
//首先加入doctype,因为都是html页面,所以我们父类不需要推迟给子类实现,直接在父类实现
stringBuffer.append( "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">" );
//页面下面就是成对的一个HTML标签,我们也在父类加入,不需要给子类实现
stringBuffer.append( "<html xmlns=\"http://www.w3.org/1999/xhtml\">" );
//下面就应该是head标签里的内容了,这个我们父类做不了主了,推迟到子类实现,所以我们定义一个抽象方法,让子类必须实现
appendHead( stringBuffer );
//下面是body的内容了,我们父类依然无法做主,仍然推迟到子类实现
appendBody( stringBuffer );
//html标签的关闭
stringBuffer.append( "</html>" );
return stringBuffer.toString();
}
//第一个模板方法
protected abstract void appendHead(StringBuffer stringBuffer);
//第二个模板方法
protected abstract void appendBody(StringBuffer stringBuffer);
}
3.构建一个实现类去实现这个抽象类
package com.md.template;
public class BuildHtmlImpl extends BuildHtml {
//可以选择性覆盖
@Override
protected void appendHead(StringBuffer stringBuffer) {
stringBuffer.append( "niceA" );
}
@Override
protected void appendBody(StringBuffer stringBuffer) {
stringBuffer.append( "niceB" );
}
public static void main(String[] args) {
BuildHtml pageBuilder = new BuildHtmlImpl();
System.out.println(pageBuilder.buldHtml());
}
}
通常情况下,模板方法模式用于定义构建某个对象的步骤与顺序,或者定义一个算法的骨架。