2014년 5월 29일 목요일

[자바디자인패턴]템플릿 메소드 패턴(Template Method Pattern),오라클자바커뮤니티JAVA디자인패턴강좌, JAVA교육은 역시 오라클자바커뮤니티 [자바개발자교육/자바교육/자바강좌/자바,Spring교육잘하는곳/자바,spring교육추천/자바실무교육/JAVA/JAVA교육/JAVA스프링학원/JAVA실무교육] [자바디자인패턴]템플릿 메소드 패턴(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~~~| +---------------+ +----------------+ |안녕하세요~| |안녕하세요~| |안녕하세요~| |안녕하세요~| |안녕하세요~| +----------------+ [출처] 오라클자바커뮤니티 - http://www.oraclejavacommunity.co.kr/bbs/board.php?bo_table=LecJava&wr_id=694 오라클자바커뮤니티교육센터, 개발자전문교육, 개인80%환급 www.oraclejavacommunity.com 평일주간(9:30~18:20) 개강 (6/09)[기업100%환급]SQL기초에서 Schema Object까지 (6/09)[기업100%환급]PL/SQL,ORACLE HINT,TUNING (6/09)[기업100%환급]Spring ,MyBatis,Hibernate실무과정 (6/16)[기업100%환급]안드로이드개발자과정 (6/16)[기업100%환급]C#4.0,WinForm,ADO.NET프로그래밍 (6/16)[기업100%환급]자바기초에서 JDBC, Servlet/JSP까지 (6/23)[교육전취업확정,채용예정자교육]Spring,MyBatis,XPlatform실무프로젝트과정 평일야간(19:00~21:50) 개강 (6/03)안드로이드개발자과정 (6/03)웹퍼블리싱 마스터 (6/09)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지 (6/10)C#4.0, ADO.NET, Network 프로그래밍 (6/10)Spring3.X, MyBatis, Hibernate실무과정 (6/18)C#,ASP.NET마스터 (6/26)SQL초보에서실전전문가까지 주말(10:00~17:50) 개강 (5/31)Spring3.X, MyBatis, Hibernate실무과정 (5/31)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지 (5/31)SQL초보에서실전전문가까지 (5/31)C#,ASP.NET마스터 (6/14)실무예제로 배워보는 jQuery(개발자/디자이너를위한) (6/14)안드로이드개발자과정 주말저녁(18:30~22:20) 개강 (6/21)JAVA,Network&WEB&Framework (6/21)SQL기초에서실무까지

[자바디자인패턴]템플릿 메소드 패턴(Template Method Pattern),오라클자바커뮤니티JAVA디자인패턴강좌, JAVA교육은 역시 오라클자바커뮤니티 [자바개발자교육/자바교육/자바강좌/자바,Spring교육잘하는곳/자바,spring교육추천/자바실무교육/JAVA/JAVA교육/JAVA스프링학원/JAVA실무교육]








[자바디자인패턴]템플릿 메소드 패턴(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~~~|
+---------------+
+----------------+
|안녕하세요~|
|안녕하세요~|
|안녕하세요~|
|안녕하세요~|
|안녕하세요~|
+----------------+






 

댓글 없음:

댓글 쓰기