學習設計模式4--模板方法模式
阿新 • • 發佈:2020-12-23
模板方法模式
模板方法模式主要是在完成某一細節層次中一致的一個過程,就是有多個業務會使用到這個方法,但是在這一個方法也就是這個一致的過程中有部分細節不同,這時用模板方法模式。
上面的結構圖,是用了兩種方式一種介面的方式,一種抽象方法的方式
抽象方法的寫法
package example; /** * @Program: 設計模式 * @Description: 定義相同的過程的方法testQuest(),在細節上不同用抽象方法隔離出來,交給子類具體實現 * @Author Mokairui * @Date 2020/12/20 22:02 */ public abstract class TestPaper { public void testQuestion1() { System.out.println("題目一, 答案:" + answer1()); } public void testQuestion2() { System.out.println("題目二, 答案:" + answer2()); } public void testQuestion3() { System.out.println("題目三, 答案:" + answer3()); } protected abstract String answer1(); protected abstract String answer2(); protected abstract String answer3(); }
實現上面的抽象方法,完成細節方法的重寫
package example; /** * @Program: 設計模式 * @Description: * @Author Mokairui * @Date 2020/12/20 22:14 */ public class StudentA extends TestPaper { @Override protected String answer1() { return "A"; } @Override protected String answer2() { return "B"; } @Override protected String answer3() { return "C"; } }
測試
TestPaper paper = new StudentA();
paper.testQuestion1();
paper.testQuestion2();
paper.testQuestion3();
介面實現
package example; /** * @Program: 設計模式 * @Description: 介面中使用預設方法定義過程,讓實現類來完成細節的重寫 * @Author Mokairui * @Date 2020/12/20 22:16 */ public interface ITest { default void question1() { System.out.println("題目一:XXXXXX"); System.out.println("答案:" + answer()); } String answer(); }
package example;
/**
* @Program: 設計模式
* @Description:
* @Author Mokairui
* @Date 2020/12/20 22:17
*/
public class TestImpl implements ITest {
@Override
public String answer() {
return "選擇A";
}
}
ITest demo = new TestImpl();
demo.question1();