템플릿 패턴 정의: 작업에서 알고리즘의 골격을 정의하고 일부 단계의 실행을 하위 클래스로 연기합니다.
사실 자바의 추상클래스는 원래 템플릿 패턴이라 많이 쓰이는데요. 그리고 이해하고 사용하기 쉽습니다. 예를 들어 바로 시작해 보겠습니다.
public abstract class Benchmark { /** * 下面操作是我们希望在子类中完成 */ public abstract void benchmark(); /** * 重复执行benchmark次数 */ public final long repeat (int count) { if (count <= 0) return 0; else { long startTime = System.currentTimeMillis(); for (int i = 0; i < count; i++) benchmark(); long stopTime = System.currentTimeMillis(); return stopTime - startTime; } } }
위 예에서는 benchmark() 작업을 반복적으로 수행하려고 하지만 benchmark()의 구체적인 내용은 설명되지 않습니다. 그러나 하위 클래스의 설명:
public class MethodBenchmark extends Benchmark { /** * 真正定义benchmark内容 */ public void benchmark() { for (int i = 0; i < Integer.MAX_VALUE; i++){ System.out.printtln("i="+i); } } }
까지 지연됩니다. 이제 템플릿 모드가 완성되었습니다. 매우 간단합니까? 사용 방법 보기:
Benchmark operation = new MethodBenchmark(); long duration = operation.repeat(Integer.parseInt(args[0].trim())); System.out.println("The operation took " + duration + " milliseconds");
아마도 이전에는 추상 클래스의 사용에 대해 궁금하셨겠지만 이제는 완전히 이해하셔야겠죠? 이렇게 하면 확장성이 높다는 점은 분명합니다. 나중에 벤치마크 내용이 변경되면 다른 애플리케이션 코드를 수정하지 않고 또 다른 상속된 하위 클래스만 만들면 됩니다.
자바 디자인 패턴에 템플릿 모드(Template mode) 도입과 관련된 더 많은 글은 PHP 중국어 홈페이지를 주목해주세요!