範本方法模式 Template Method Pattern

1.為什麼要使用範本方法模式

減少重複的程式碼

2.如何使用

將重複的程式碼拉到抽象父類別中,並將需要做出不同結果的部分寫成抽象方法,透過多型讓子類別實現該抽象方法時,做出我們需要區別的不同行為

範例

//抽象的父類別
public abstract class NBAPlayer {
    String name;
    //在方法中呼叫抽象方法來讓結果不同
    public void score(){
        System.out.println(this.name+"用"+this.skill()+"得分");
    }
    //抽象方法讓子類別實現時決定該做什麼
    abstract  String skill();
    public static class Lillard extends NBAPlayer{
        public Lillard(){
            this.name = "Lillard";
        }
        @Override
        String skill() {
            return "LOGOSHOT";
        }
    }
    public static class Curry extends NBAPlayer{
        public Curry(){
            this.name = "Curry";
        }
        @Override
        String skill() {
            return "大號三分球";
        }
    }
    public static class KD extends NBAPlayer{
        public KD(){
            this.name = "KD";
        }
        @Override
        String skill() {
            return "中距離急停跳投";
        }
    }
    public static class LBJ extends NBAPlayer{
        public LBJ(){
            this.name = "LBJ";
        }
        @Override
        String skill() {
            return "坦克切入";
        }
    }
}

實際結果

public class Main {

    public static void main(String[] args) {
	// write your code here
        NBAPlayer kd = new NBAPlayer.KD();
        NBAPlayer curry = new NBAPlayer.Curry();
        NBAPlayer lbj = new NBAPlayer.LBJ();
        NBAPlayer lillard = new NBAPlayer.Lillard();
        kd.score();
        curry.score();
        lbj.score();
        lillard.score();
    }
}