2014년 12월 16일 화요일

[자바디자인패턴]템플릿 메소드 패턴(Template Method Pattern),오라클자바커뮤니티JAVA디자인패턴강좌, JAVA교육은 역시 오라클자바커뮤니티[구로JSP자바교육학원/구로디지털자바,서블릿학원/스프링,마이바티스교육/실무스프링교육]

[자바디자인패턴]템플릿 메소드 패턴(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-272865
 [채용확정무료교육]오라클자바개발잘하는신입뽑기2개월과정,교육…오라클자바…12-112090
53 [평일100%환급7건]웹퍼블리싱,자바&JSP,안드로이드,C#닷넷,SQL기… 오라클자바…03-151941
52 [주말]C#,ASP.NET마스터 오라클자바…01-312082
51 [기업100%환급,평일주간]SQL기초에서스키마오브젝트,PLSQL,힌트… 오라클자바…01-313039
50 [주말주간]자바&웹,jQUERY,스프링프레임워크,마이바티스 오라클자바…01-311607
49 [평일주간/야간,주말주간/야간]Spring,MyBatis,Hibernate개발자… 오라클자바…01-191934
48 [평일주간/야간,주말주간/야간]안드로이드개발자과정(Adnroid 교… 오라클자바…01-111794
47 [평일야간,주말주간야간]JAVA,Network&JSP&Spring,MyBatis,Hiber… 오라클자바…01-032401
46 [100%환급,실무전문]SQL/빅데이터/자바/스프링/웹퍼블리싱/안드… 오라클자바…12-272865
45 [주말야간]개발자를위한PLSQL,SQL튜닝,힌트(토/일) 오라클자바…12-192014
44 [평일주간/야간,주말주간/야간]웹퍼블리싱 마스터(HTML5,CSS3,jQ… 오라클자바…12-141981
43 [채용확정무료교육]오라클자바개발잘하는신입뽑기2개월과정,교육… 오라클자바…12-112090
42 [주말야간]JAVA,JSP,Spring,PLSQL,힌트,웹퍼블리싱,안드로이드,… 오라클자바…12-091625
41 [평일야간,주말야간]닷넷(C#,Network,ADO.NET,ASP.NET)마스터 오라클자바…12-011846
40 [기업100%환급]오라클&자바웹스프링신입과정3주(SQL,JAVA,JSP,Se… 오라클자바…12-012089
39 [평일야간,주말]SQL기초에서실무까지(SQL기초,PLSQL,힌트,튜닝) 오라클자바…12-011498

댓글 없음:

댓글 쓰기