Template Method Pattern
하위 클래스에서 구체적으로 처리.
GUI 앱에서 Menu, Sidebar를 열기/닫기/크기 얻기 동작을 한다고 가정.
AbstractClass
/**
* Template 역할
*/
public abstract class AbstractLayout {
private int width;
private int height;
public AbstractLayout(int width, int height) {
this.width = width;
this.height = height;
}
public abstract void open();
public abstract void close();
public final int[] getMesasure() {
return new int[] {width, height};
}
}
ConcreteClass
public class MenuLayout extends AbstractLayout {
public MenuLayout(int width, int height) {
super(width, height);
}
@Override
public void open() {
System.out.println("Menu opened!");
}
@Override
public void close() {
System.out.println("Menu closed!");
}
}
public class SidebarLayout extends AbstractLayout {
public SidebarLayout(int width, int height) {
super(width, height);
}
@Override
public void open() {
System.out.println("Sidebar opened!");
}
@Override
public void close() {
System.out.println("Sidebar closed!");
}
}
Client
public class Main {
public static void main(String[] args) {
AbstractLayout menuLayout = new MenuLayout(100, 100);
AbstractLayout sidebarLayout = new SidebarLayout(100, 500);
print(menuLayout);
print(sidebarLayout);
}
private static void print(AbstractLayout layout) {
layout.open();
layout.close();
for(int value : layout.getMesasure()) {
System.out.println(value);
}
System.out.println();
}
}
/*
Menu opened!
Menu closed!
100
100
Sidebar opened!
Sidebar closed!
100
500
*/