GoF 디자인패턴 - Template

Clean Code Big Poo·2025년 6월 3일
0
post-thumbnail

Overview

디자인패턴 시작하기를 보고 정리하기

Template

어떤 기능에 대해 실행되어야 할 각 단계에 대한 설계만 구현,
설계를 상황에 맞게 구현

  • 어떤 상황에서는 A, 어떤 상황에선 B 단계로 실행

다이어그램

  • DisplayArticleTemplate : 각 단계에 해당하는 메소드를 순서대로 실행하면 해주는 클래스. 추상클래스, 단계에 대한 메소드는 선언만 되어 있고, 구현되어 있지 않기 때문.

  • SimpleDisplayArcticle, CaptionDisplayArticle : DisplayArticleTemplate를 상속받아 구현

  • Article : DisplayArticleTemplate, SimpleDisplayArcticle, CaptionDisplayArticle에서 출력할 테이터를 얻을 수 있는 데이터 집합.

구현 코드

Article

내용을 정의하는 객체

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;
    }
}

DisplayArticleTemplete

단계 정의

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();
}

SimpleDisplayArticle

단계별 구현

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());
    }
}

CaptionDisplayArticle

단계별 구현

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());
    }

}

Main

사용법


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();
    }
}

0개의 댓글