디자인패턴 시작하기를 보고 정리하기
어떤 기능에 대해 실행되어야 할 각 단계에 대한 설계만 구현,
설계를 상황에 맞게 구현
- 어떤 상황에서는 A, 어떤 상황에선 B 단계로 실행
DisplayArticleTemplate : 각 단계에 해당하는 메소드를 순서대로 실행하면 해주는 클래스. 추상클래스, 단계에 대한 메소드는 선언만 되어 있고, 구현되어 있지 않기 때문.
SimpleDisplayArcticle, CaptionDisplayArticle : DisplayArticleTemplate를 상속받아 구현
Article : DisplayArticleTemplate, SimpleDisplayArcticle, CaptionDisplayArticle에서 출력할 테이터를 얻을 수 있는 데이터 집합.
내용을 정의하는 객체
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){
this.content = content;
this.title = title;
this.footer=footer;
}
public String getTitle() {
return title;
}
public ArrayList<String> getContent() {
return content;
}
public String getFooter() {
return footer;
}
}
단계 정의
public abstract class DisplayArticleTemplete {
protected Article article;
public DisplayArticleTemplete(Article article) {
this.article = article;
}
public final void display(){
title();
content();
footer();
}
protected abstract void title();
protected abstract void content();
protected abstract void footer();
}
단계별 구현
import java.util.ArrayList;
public class SimpleDisplayArticle extends DisplayArticleTemplete{
public SimpleDisplayArticle(Article article) {
super(article);
}
protected void content() {
ArrayList<String> content = article.getContent();
for (String s : content) {
System.out.println(s);
}
}
protected void title() {
System.out.println(article.getTitle());
}
protected void footer() {
System.out.println(article.getFooter());
}
}
단계별 구현
import java.util.ArrayList;
public class CaptionDisplayArticle extends DisplayArticleTemplete{
public CaptionDisplayArticle(Article article) {
super(article);
}
protected void content() {
ArrayList<String> content = article.getContent();
for (String s : content) {
System.out.println(" "+s);
}
}
protected void title() {
System.out.println("Title = "+article.getTitle());
}
protected void footer() {
System.out.println("FOOTER = "+article.getFooter());
}
}
사용법
import java.util.ArrayList;
public class Main {
public static void main(String[] args){
String title = "디자인 패턴";
ArrayList<String> content = new ArrayList<String>();
content.add("디자인 패턴은 클래스 간의 효율적이고 최적화된 관계를 설계하는 것입니다.");
content.add("각 패턴을 외우기 보다 이해하는 것이 중요합니다.");
content.add("다양한 패턴을 접하고 반복적으로 이해 할 수록");
content.add("각 디자인 채턴에 대한 응용의 폭이 없어질 것 입니다.");
String footer = "2022.01.09, GIS Developer 김형준 ";
Article article = new Article(title, content, footer);
System.out.println("[CASE-1]");
DisplayArticleTemplete style1 = new SimpleDisplayArticle(article);
style1.display();
System.out.println();
System.out.println("[CASE-2]");
DisplayArticleTemplete style2 = new CaptionDisplayArticle(article);
style2.display();
System.out.println();
}
}