2010年3月5日 星期五

Design Pattern : 03 Template


在父類別定義好大綱(也就是運算邏輯),
子類別只要實作method 就可以讓多個class共用相同的運算邏輯
參與者
1.Template 父類別
Template必須為abstract class,不能用interface宣告
因為在template內,負責主要邏輯運算的method 必須要是一個
final method



public abstract class Template{
    public abstract void open();
    public final void display(){
        open();
        open();
        open();
    }
}

sample裡的display method包含了運算邏輯,是一個實體的method,但
在裡面呼叫執行的是抽象 method,這部分的method一定要在子類別內被實做
2.MyDisplay 子類別
子類別繼承Template,並把abstract 部分實作出來



public class MyDisplay{
    public void open(){
        .....
    }
}  

3.Main主程式



Template a=new MyDisplay();
a.display();

主程式執行時,會用到的是包含運算邏輯的method

Abstract class與Interface的差別
1.只要class內有method宣告為abstract,則class就必須宣告為abstract
Interface內所有的method都必須是abstract
也就是說在abstract class內,還可包含有非abstract的method
如果是extend abstract method ,只要 實作abstract method即可
對於非abstract method可直接使用,若要改寫則要override


2.只要是abstract class就不能被直接new 出instance


3.Class一次只可以繼承(extends )一個父class
但可以實作(implement)多個class
亦可同時extends 與implement

沒有留言: