출처 | https://www.youtube.com/watch?v=hPTqWJm51Vs&list=PLe6NQuuFBu7FhPfxkjDd2cWnTy2y_w_jZ&index=4
어떤 기능에 대해 실행 되어야 할 각 단계에 대한 순서만을 정해놓고, 각 단계에 대한 세부 구현은 상황에 맞게 다르게 구현 할 수 있도록 하는 것.
그림[위]를 보면 단계1, 단계2, 단계3으로 나눠져있다. 단계1~3까지 구체적인 코드가 정해지진 않았다. 이 3단계에 대한 구현 코드는 상황에 맞게 구현된다.
구현 A는 단계1,2,3에 대해 실제 코드로 구현된 경우
구현 B는 구현 A와 다르게 구현된 경우 어떤 상황에서는 A가 실행
DisplayArticleTemplate
은 아직 구현되지 않은 각 단계에 순서대로 실행해주는 클래스다. 순서대로 실행해주는 클래스이다. + 추상클래스로 구현된다.
SimpleDisplayArcticle
과 CaptionDisplayArticle
은 구체적인 내용을 구현하는 클래스다.
Article
클래스는 CaptionDisplayArticle/ SimpleDisplayArcticle에서 얻을 수 있는 클래스이다.
package DesignPattern.Template;
import java.util.ArrayList;
public class Article {
private String Title;
private ArrayList<String> content;
private String footer;
public Article(String title, ArrayList<String> content, String footer) {
Title = title;
this.content = content;
this.footer = footer;
}
public String getTitle() {
return Title;
}
public ArrayList<String> getContent() {
return content;
}
public String getFooter() {
return this.footer;
}
}
package DesignPattern.Template;
import java.util.ArrayList;
public class CaptionDisplayArticle extends DisplayArticleTemplate{
public CaptionDisplayArticle(Article article) {
super(article);
}
@Override
protected void title() {
System.out.println("Title: " + article.getTitle());
}
@Override
protected void content() {
System.out.println("Content : ");
ArrayList<String> content = article.getContent();
int cntLines = content.size();
for(int i = 0; i<cntLines; i++)
{
System.out.println(" "+ content.get(i));
}
}
@Override
protected void footer() {
System.out.println("Footer: "+ article.getFooter());
}
}
package DesignPattern.Template;
public abstract class DisplayArticleTemplate {
protected Article article;
public DisplayArticleTemplate(Article article) {
this.article = article;
}
public final void display()
{
title();
content();
footer();
}
protected abstract void title();
protected abstract void content();
protected abstract void footer();
}
package DesignPattern.Template;
import java.util.ArrayList;
public class SimpleDisplayArticle extends DisplayArticleTemplate{
public SimpleDisplayArticle(Article article) {
super(article);
}
@Override
protected void title() {
System.out.println(article.getTitle());
}
@Override
protected void content() {
ArrayList<String> content = article.getContent();
int cntLines = content.size();
for(int i = 0; i < cntLines; i++)
{
System.out.println(content.get(i));
}
}
@Override
protected void footer() {
System.out.println(article.getFooter());
}
}
package DesignPattern.Template;
import java.util.ArrayList;
public class MainEntry {
public static void main(String[] args) {
String title = "디자인패턴";
ArrayList<String> content = new ArrayList<String>();
content.add("디자인패턴 앗살라마이쿰");
content.add("디자인패턴 외우기 진짜 싫어");
content.add("어쩔티비");
content.add("우짤래미");
String footer = "2023.8.12 Developer 오지환";
Article article = new Article(title, content, footer);
System.out.println("Case - 1");
DisplayArticleTemplate stlye1 = new SimpleDisplayArticle(article);
stlye1.display();
System.out.println();
System.out.println("Case - 2");
DisplayArticleTemplate stlye2 = new SimpleDisplayArticle(article);
stlye2.display();
}
}
--------------------------------------
Case - 1
디자인패턴
디자인패턴 앗살라마이쿰
디자인패턴 외우기 진짜 싫어
어쩔티비
우짤래미
2023.8.12 Developer 오지환
Case - 2
디자인패턴
디자인패턴 앗살라마이쿰
디자인패턴 외우기 진짜 싫어
어쩔티비
우짤래미
2023.8.12 Developer 오지환
Process finished with exit code 0