1. 程式人生 > 實用技巧 >學習設計模式4--模板方法模式

學習設計模式4--模板方法模式

模板方法模式

模板方法模式主要是在完成某一細節層次中一致的一個過程,就是有多個業務會使用到這個方法,但是在這一個方法也就是這個一致的過程中有部分細節不同,這時用模板方法模式。

上面的結構圖,是用了兩種方式一種介面的方式,一種抽象方法的方式

抽象方法的寫法

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();