วัตถุประสงค์ของการเขียนโปรแกรมด้วยรูปแบบ template method ซึ่งเป็นหนึ่งในชนิดของรูปแบบ behavioral  คือ เพื่อรองรับความหลากหลายของวิธีการในการทำงานย่อย ในขณะที่โครงสร้างการทำงานหลักยังคงเดิม เช่น หากเราพูดถึงรถ รถแต่ละแบบจะมีองค์ประกอบที่เหมือนกัน แต่มีข้อปลีกย่อยบางอย่างที่แตกต่างออกไป เช่น อัตราเร่งของรถสปอร์ตจะเร็วกว่าระประหยัดพลังงาน เป็นต้น การใช้งานรูปแบบนี้พบได้ทั่วไปใน Java API

วิธีการคือเราจะประกาศคลาสแบบ abstarct เพื่ออธิบายลักษณะของออบเจกต์ที่เราต้องการ และสำหรับพฤติกรรมปลีกย่อยที่แตกต่างกันเราจะใช้เมธอดแบบ abstract ดังนั้นคลาสลูกแต่ละคลาสที่สืบทอดลงมาจะจะมีสถานะของออบเจกต์ที่เหมือนกัน แต่มีรายละเอียดของพฤติกรรมบางอย่างที่ต่างกันจากการโอเวอร์ไรด์เมธอด

ตัวอย่าง เช่น

abstract class Car {
int speed;
abstract void accerelate();
}

class EcoCar extends Car {
@Override
void accerelate() {
speed += 3;
}
}

class SuperCar extends Car {
@Override
void accerelate() {
speed += 50;
}
}

และในการใช้งานเราจะอ้างอิงตัวแปรด้วยคลาสหลักและสร้างออบเจกต์จากคลาสลูก

package com.company;

public class Main {

    public static void main(String[] args) {
        Car myEcoCar = new EcoCar();
        Car mySuperCar = new SuperCar();
        myEcoCar.accerelate();
        mySuperCar.accerelate();
        System.out.println("My eco car's speed = "+myEcoCar.speed);
        System.out.println("My super car's speed = "+mySuperCar.speed);
    }
}
My eco car's speed = 3
My super car's speed = 50