Java開發中模板方法模式定義及用法詳解

Java開發中模板方法模式定義及用法詳解

前言

  在Java開發中模板方法模式相信大家都很熟悉,但是又有幾個小夥伴熟練掌握了呢?在這裏就模板方法模式將做一個詳細的講解。

正文

  定義:在基類中定義一個操作中的算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。
  可以理解爲將不變的行爲放在父類中,會發生變化的行爲在子類中實現,這樣可以避免子類中出現大量重複的代碼。也就是說當子類中的方法混合了不變和可變的行爲,我們通過模板方法就能將這些不變的行爲放到一個單獨的地方。模板方法的類結構比較簡單,下面直接貼出代碼
父類

public abstract class AbstractClass {
/**

  • 可變方法1
    */
    public abstract void changeMethod1();
    /**
  • 可變方法2
    */
    public abstract void changeMethod2();
    public void templateMethod() {
    System.out.println("執行可變方法1前");
    changeMethod1();
    System.out.println("執行可變方法1後");
    System.out.println("執行可變方法2前");
    changeMethod2();
    System.out.println("執行可變方法2後");
    }
    }

兩個子類

public class ConcreteClassA extends AbstractClass {br/>@Override
public void changeMethod1() {
}
@Override
br/>System.out.println("子類A的可變方法1");
}
@Override
public void changeMethod2() {
System.out.println("子類A的可變方法2");
}
}

public class ConcreteClassB extends AbstractClass {br/>@Override
public void changeMethod1() {
}
@Override
br/>System.out.println("子類B的可變方法1");
}
@Override
public void changeMethod2() {
System.out.println("子類B的可變方法2");
}
}

測試代碼和輸出結果

AbstractClass a = new ConcreteClassA();
a.templateMethod();
System.out.println("------------------");
AbstractClass b = new ConcreteClassB();
b.templateMethod();
Java開發中模板方法模式定義及用法詳解
  從上面代碼可以看出templateMethod方法中只有一部分是會隨子類的實現不同發生改變,通過模板方法讓我們不需要在子類中重複編寫那些不變的代碼。接下來我們通過一個簡單的抄考卷的例子,來加深對模板方法的理解,代碼如下
考卷抽象類
public abstract class AbstractPaper {
public void createPaper() {
question1();
answerText();
answer1();
question2();
answerText();
answer2();
question3();
answerText();
answer3();
}
public void question1() {
System.out.println("問題1:");
}
public void question2() {
System.out.println("問題2:");
}
public void question3() {
System.out.println("問題3:");
}
public void answerText() {
System.out.print("答案:");
}
/**

  • 問題1的答案
    */
    public abstract void answer1();
    /**
  • 問題2的答案
    */
    public abstract void answer2();
    /**
  • 問題3的答案
    */
    public abstract void answer3();
    }

兩張答案不同的考卷(省略一個,代碼類似)

public class PaperA extends AbstractPaper {br/>@Override
public void answer1() {
}
@Override
br/>System.out.println("A");
}
@Override
public void answer2() {}
@Override
br/>System.out.println("B");
}
@Override
public void answer3() {
System.out.println("C");
}
}

測試代碼和輸出結果

AbstractPaper paperA = new PaperA();
paperA.createPaper();
System.out.println("------------");
AbstractPaper paperB = new PaperB();
paperB.createPaper();

Java開發中模板方法模式定義及用法詳解

結尾

  以上就是整個功能的實現代碼。

文章來自:https://www.itjmd.com/news/show-6367.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章