나는 약간의 작업을 수행하는 util 클래스를 가지고 있습니다. 분명히 확장을 위해 닫히고 모든 메소드는 정적입니다. 간단하게하기 위해서, 클래스는 다음과 같습니다정적 클래스의 템플릿 메서드 패턴
public final class Util {
private Util() { }
public static void doWork() {
// some work
int variable = help();
// some work uses variable
}
private static int help() {
// some helper functionality
}
}
클래스는 계산을 많이 수행하는 방법 doWork
있습니다. 그런데 메소드는 도우미 메소드 help
을 호출하여 일부 결과를 얻고 나머지 코드는 help
메소드가 리턴 한 결과를 사용합니다.
이제 클라이언트 코드에서 doWork
메서드의 기능을 다시 사용하고 싶지만 help
을 호출하는 대신 help2
메서드를 호출하고 싶습니다. 가장 간단한 해결책은 help
을 help2
으로 바꾸고 방법 doWork2
을 만드는 것입니다.
doWork
의 모든 변경 사항을 doWork2
에 복제해야하므로 매우 나쁜 접근 방법입니다. 이것은 Template Method
패턴과 매우 유사하지만 여기에 확장 기능이 없기 때문에 적용 할 수 없습니다.
doWork
의 모든 기존 사용자를 유지하기 위해 함께했다
최선의 해결책 :
더 나은 디자인 솔루션이 문제를 해결하기 위해 적용 할 수있는 무엇public static void doWork() {
doWorkWithParameter(true);
}
public static void doWorkWithParameter(boolean helpOrHelp2) {
// some work
int variable = helpOrHelp2 ? help() : help2();
// some work uses variable
}
? Template Pattern
과 같은 유연성을 얻을 수있는 방법이 있지만 util 클래스에 적용 할 수 있습니다.
미리 감사드립니다.
당신이 솔루션에 메서드 오버로드를 사용하지 않는 이유가 있나요? 'public static void doWork() {...}' 'public static void doWork (boolean param) {...}' – Crazenezz
아니면 여전히'public static void doWork (int variable)'입니다. 비록 내가 실제적인 대답은 혼란이 통계학에 기인하고 그 물체가 더 추상적 인 예를 가지고 말하기가 더 깔끔한 답을 제공한다는 것입니다. –
당신이 찾고있는 것은 전략 패턴입니다. Arnaldo의 대답을 확인하십시오. –