现在的位置: 首页 > 综合 > 正文

java设计模式—模板方法模式

2013年04月26日 ⁄ 综合 ⁄ 共 2054字 ⁄ 字号 评论关闭

模板是指在薄片塑料板上面写字后挖空,再使用毛笔或色笔涂满挖空部分,就能看到纯手工而以不失工整的字样,看到模板上的挖空形状,马上就知道最后会变出什么样子的字,不过实际上所显现出来的字样还是要依所使用的画笔种类而定.拿黑色签字笔当画笔,结果当然就是签字笔的字样;当用铅笔来画,得到的也只会是灰黑色的铅笔字;如果用五颜六色的彩色笔,自然能创出让人眼花的多色字.但是,无论使用哪种文具,制作出来的字样都还是脱不了模板上已经固定的形状。

下面我们用例子说明模板方法

1.模板类,相当于我们上面提到的薄片塑料板

Java代码  
package com.pattern.templateMethod;  
  
/** 
 * 抽象类,充当模板角色 
 * @author administrator 
 * 
 */  
public abstract class AbstractDisplay {  
    //由子类实现的抽象方法  
    public abstract void open();     
    public abstract void print();  
    public abstract void close();  
    //抽象类实现的方法,final可以保证在子类不会被修改  
    public final void display() {  
        open();   //先open...  
        for(int i=0; i < 5; i++) {  //反复输出5次  
            print();    
        }  
        close(); //输出完毕,close  
    }  
}  
 
  2.字符类,输出单个字符
Java代码  
package com.pattern.templateMethod;  
  
public class CharDisplay extends AbstractDisplay {  
    private char ch;     //应输出的字符  
    public CharDisplay(char ch) {  //把构造函数传递过来的字符ch,存储在字段内  
        this.ch = ch;  
    }  
    
    public void open() {  
        System.out.print("<<");   //输出"<<"作为开始字符串  
    }  
    public void close() {  
        System.out.println(">>");  //输出 ">>"作为结束字符串  
    }  
    public void print() {  
        System.out.print(ch);    //输出存储在字段的字符  
    }  
  
}  
 
   3.字符串类,输出字符串
Java代码  
package com.pattern.templateMethod;  
  
/** 
 *  
 * @author administrator 
 */  
public class StringDisplay extends AbstractDisplay {  
    private String string;  //应输出的字符串  
    private int width;      //以byte为单位所求出的字符串的"长度"  
      
    public StringDisplay(String string) {  
        this.string =string;  
        width = string.getBytes().length;  
    }  
  
    public void open() {  //打印头装饰字符串  
        printLine();  
    }  
    public void print() { //打印内容  
        System.out.println("|"+string+"|");  
    }  
    public void close() { //打印尾装饰字符串  
        printLine();  
    }  
  
    public void printLine() {  
        System.out.print("+");  //输出"+"号表示边框位置  
        for(int i=0; i < width; ++i) {  
            System.out.print("-");  //当作线段  
        }  
        System.out.println("+");  //输出"+"号表示边框位置  
    }  
}  
  4.测试类
Java代码  
package com.pattern.templateMethod;  
  
public class Main {  
    public static void main(String[] args) {  
        //建立1个有'A'的CharDisplay的对象  
        AbstractDisplay d1 = new CharDisplay('A');  
        //建立1个有"Hello world"的StringDisplay的对象  
        AbstractDisplay d2 = new StringDisplay("Hello World");  
          
        //d1,d2都是AbstractDisplay的子类对象,可以调用继承到的display()方法  
        d1.display();  
        d2.display();  
    }  
}  
 
 输出:
 
C代码  
 <<AAAAA>>  
+-----------+  
|Hello World|  
|Hello World|  
|Hello World|  
|Hello World|  
|Hello World|  
+-----------+  

设计思想:作为模板的方法定义在父类(父类为抽象类),而方法定义使用抽象方法,实现抽象方法的是子类,要在子类实现方法,才能决定具体的操作。如果在不同的子类执行不同实现就可以发展出不同的处理内容。不过,无论在哪个子类执行任何一种实现,处理的大致流程都还是要依照父类制定的方式。

抱歉!评论已关闭.