ivaneye.com

语言与模式-13模板模式

意图

定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

适用性

Java实现

web开发中使用的布局就是模板模式的典型应用!

public abstract class Layout{
     public void show(){
          System.out.println("Header");
          body();
          System.out.println("Footer");
     }
     public abstract void body();
}
public class Index extends Layout{
     public void body(){
       System.out.println("Index");
     }
}
public class Detail extends Layout{
     public void body(){
       System.out.println("Detail");
     }
}

调用:

Layout layout = new Index();
layout.show();
layout = new Detail();
layout.show();

Clojure实现

直接上代码:

(defn show [body]
  (println "Header")
  (body)
  (println "Footer"))
(defn index []
  (println "Index"))
(defn detail []
  (println "Detail"))
(show index)
(show detail)