Young Jun Park (박영준)
Java back-end developer
Park Young Jun
Github : https://github.com/june0313
Y3S Study group : https://github.com/y3s-study
2018.08.24
<div class="entry">
<h1>{{title}}</h1>
<div class="body">
{{body}}
</div>
</div>
{
title: "AAA",
body: "AAA"
}
{
title: "BBB",
body: "BBB"
}
<div class="entry">
<h1>AAA</h1>
<div class="body">
AAA
</div>
</div>
<div class="entry">
<h1>BBB</h1>
<div class="body">
BBB
</div>
</div>
template
model
public class Programmer {
public void work() {
goToOffice();
doWork();
goToHome();
}
private void goToOffice() {
System.out.println("출근");
}
private void doWork() {
System.out.println("코딩");
}
private void goToHome() {
System.out.println("퇴근");
}
}
public class Designer {
public void work() {
goToOffice();
doWork();
goToHome();
}
private void goToOffice() {
System.out.println("출근");
}
private void doWork() {
System.out.println("디자인");
}
private void goToHome() {
System.out.println("퇴근");
}
}
Programmer.java
Designer.java
public static void main(String[] args) {
Programmer programmer = new Programmer();
programmer.work();
System.out.println("----------");
Designer designer = new Designer();
designer.work();
}
출근
코딩
퇴근
----------
출근
디자인
퇴근
main method
result
public abstract class Worker {
public void work() {
goToOffice();
doWork();
goToHome();
}
protected abstract void doWork();
private void goToOffice() {
System.out.println("출근");
}
private void goToHome() {
System.out.println("퇴근");
}
}
Worker.java
public class Programmer extends Worker {
@Override
protected void doWork() {
System.out.println("코딩");
}
}
Programmer.java
public class Designer extends Worker {
@Override
protected void doWork() {
System.out.println("디자인");
}
}
Designer.java
공통 로직은 상위 클래스인 Worker 클래스에서 처리하고 변하는 부분에 해당하는 doWork() 메서드를 오버라이딩
public static void main(String[] args) {
Worker worker = new Programmer();
worker.work();
System.out.println("----------");
worker = new Designer();
worker.work();
}
출근
코딩
퇴근
----------
출근
디자인
퇴근
main method
result
public abstract class Worker {
public void work() {
goToOffice();
doWork();
goToHome();
}
protected abstract void doWork();
}
Template method | 공통 로직이 포함되어 있으며 추상 메서드를 호출하는 메서드 | work() |
Hook method (Primitive method) | 하위 클래스에서 오버라이드 해야하는 메서드 | doWork() |
public class TestServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
System.out.println("GET");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) {
System.out.println("POST");
}
}
public abstract class HttpServlet extends GenericServlet {
// ...
// template에 해당하는 service() 메서드
protected void service(HttpServletRequest req, HttpServletResponse resp) {
if (method.equals(METHOD_GET)) {
// ...
doGet(req, resp);
} else if (method.equals(METHOD_POST)) {
// ...
doPost(req, resp);
} else {
// ...
}
}
}
By Young Jun Park (박영준)
Template method pattern에 대해 소개합니다.