[자바디자인패턴]템플릿 메소드 패턴(Template Method Pattern),오라클자바커뮤니티JAVA디자인패턴강좌, JAVA교육은 역시 오라클자바커뮤니티
상위 클래스쪽에 템플릿에 해당하는 메소드가 정의되어 있고,그 메소드의 정의 안에는 추상 메소드가 사용되고 있어 상위 클래스의 프로그램만 보면 추상 메소드를 어떻게 호출 하고 잇는지 알 수 있지만 최종적으로 어떤 처리가 수행되는지는 알 수 없다.
상위클래스의 추상 메소드를 실제로 구현하는 것은 하위 클래스 이다. 하위 클래스 측에서 메소드를 구현하면 구체적인 처리가 결정되고 서로 다른 하위 클래스가 서로 다른 구현을 실행하면 서로 다른 처리가 실행된다. 그러나 어떤 하위 클래스에서 어떤 구현을 하더라도 처리의 뼈대를 결정하고 하위 클래스에서 그 구체적인 내용을 결정하는 디자인 패턴을 Template Method Pattern이라 한다.
package factory;
//AbstractDisplay.java
abstract class AbstractDisplay {
public abstract void open();
public abstract void print();
public abstract void close();
public final void display() {
open();
for (int i = 0; i < 5; i++) {
print();
}
close();
}
}
// GreetingDisplay.java
class GreetingDisplay extends AbstractDisplay {
private String s;
public GreetingDisplay(String s) {
this.s = s;
}
public void open() {
System.out.println("hello " + s);
}
public void print() {
System.out.println("your name is " + s);
}
public void close() {
System.out.println("bye~ " + s);
}
}
// StringDisplay.java
class StringDisplay extends AbstractDisplay {
private String string;
private int width;
public StringDisplay(String string) {
this.string = string;
this.width = string.getBytes().length;
}
public void open() {
printLine();
}
public void print() {
System.out.println("|" + string + "|");
}
public void close() {
printLine();
}
private void printLine() {
System.out.print("+");
for (int i = 0; i < width; i++) {
System.out.print("-");
}
System.out.println("+");
}
}
// Main.java
public class TemplateMethodTest {
public static void main(String[] args) {
AbstractDisplay d1 = new GreetingDisplay("오라클자바커뮤니티");
AbstractDisplay d2 = new StringDisplay("Hello, world~~~");
AbstractDisplay d3 = new StringDisplay("안녕하세요~");
d1.display();
d2.display();
d3.display();
}
}
[결과]
hello 오라클자바커뮤니티
your name is 오라클자바커뮤니티
your name is 오라클자바커뮤니티
your name is 오라클자바커뮤니티
your name is 오라클자바커뮤니티
your name is 오라클자바커뮤니티
bye~ 오라클자바커뮤니티
+---------------+
|Hello, world~~~|
|Hello, world~~~|
|Hello, world~~~|
|Hello, world~~~|
|Hello, world~~~|
+---------------+
+----------------+
|안녕하세요~|
|안녕하세요~|
|안녕하세요~|
|안녕하세요~|
|안녕하세요~|
+----------------+
[100%환급,실무전문]SQL/빅데이터/자바/스프링/웹퍼블리싱/안드… | 12-27 | 2865 | ||
[채용확정무료교육]오라클자바개발잘하는신입뽑기2개월과정,교육… | 12-11 | 2090 | ||
53 | [평일100%환급7건]웹퍼블리싱,자바&JSP,안드로이드,C#닷넷,SQL기… | 03-15 | 1941 | |
52 | [주말]C#,ASP.NET마스터 | 01-31 | 2082 | |
51 | [기업100%환급,평일주간]SQL기초에서스키마오브젝트,PLSQL,힌트… | 01-31 | 3039 | |
50 | [주말주간]자바&웹,jQUERY,스프링프레임워크,마이바티스 | 01-31 | 1607 | |
49 | [평일주간/야간,주말주간/야간]Spring,MyBatis,Hibernate개발자… | 01-19 | 1934 | |
48 | [평일주간/야간,주말주간/야간]안드로이드개발자과정(Adnroid 교… | 01-11 | 1794 | |
47 | [평일야간,주말주간야간]JAVA,Network&JSP&Spring,MyBatis,Hiber… | 01-03 | 2401 | |
46 | [100%환급,실무전문]SQL/빅데이터/자바/스프링/웹퍼블리싱/안드… | 12-27 | 2865 | |
45 | [주말야간]개발자를위한PLSQL,SQL튜닝,힌트(토/일) | 12-19 | 2014 | |
44 | [평일주간/야간,주말주간/야간]웹퍼블리싱 마스터(HTML5,CSS3,jQ… | 12-14 | 1981 | |
43 | [채용확정무료교육]오라클자바개발잘하는신입뽑기2개월과정,교육… | 12-11 | 2090 | |
42 | [주말야간]JAVA,JSP,Spring,PLSQL,힌트,웹퍼블리싱,안드로이드,… | 12-09 | 1625 | |
41 | [평일야간,주말야간]닷넷(C#,Network,ADO.NET,ASP.NET)마스터 | 12-01 | 1846 | |
40 | [기업100%환급]오라클&자바웹스프링신입과정3주(SQL,JAVA,JSP,Se… | 12-01 | 2089 | |
39 | [평일야간,주말]SQL기초에서실무까지(SQL기초,PLSQL,힌트,튜닝) | 12-01 | 1498 |
댓글 없음:
댓글 쓰기