顿搜
飞过闲红千叶,夕岸在哪
类目归类
我们经常会面临许多框架结构上相 似,但是却在细节上稍有不同的代码。另外,程序中有些规则和约束,我们希望不会被违反。
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method使得子类可以不改变一个算 法的结构即可重定义该算法的某些特定步骤。
这是一个很简单的模式,却使用非常广泛。之 所以简单是因为在这个模式中仅仅使用到了继承关系。
模板方法模式中涉及到AbstractClass(抽象类),ConcreteClass(具体子类)等角色
public abstract class HouseTemplate {
//模板方法
public final void buildHouse(){
buildFoundation();
buildPillars();
buildWalls();
buildWindows();
System.out.println("House is built.");
}
//基本方法—具体方法
private void buildWindows() {
System.out.println("Building Glass Windows");
}
//基本方法—抽象方法
public abstract void buildWalls();
public abstract void buildPillars();
//基本方法—钩子方法
private void buildFoundation() {
System.out.println("Building foundation with cement,iron rods and sand");
}
}public class WoodenHouse extends HouseTemplate {
@Override
public void buildWalls() {
System.out.println("Building Wooden Walls");
}
@Override
public void buildPillars() {
System.out.println("Building Pillars with Wood coating");
}
}public class GlassHouse extends HouseTemplate {
@Override
public void buildWalls() {
System.out.println("Building Glass Walls");
}
@Override
public void buildPillars() {
System.out.println("Building Pillars with glass coating");
}
}public class HousingClient {
public static void main(String[] args) {
HouseTemplate houseType = new WoodenHouse();
//使用模板方法
houseType.buildHouse();
System.out.println("************");
houseType = new GlassHouse();
houseType.buildHouse();
}
}模板方法中涉及到的方法:
1、优点
1、与工厂方法模式的关系
2、与策略模式的关系
要完成在某一细节层次一致的一个过程或一系列步骤,但其中个别步骤在更细节的层次上有不同的实现。
提供了一个很好的代码复用平台。提供了一种机制,使得约束、规则可一次编码,处处使用