디자인패턴 - Templete

지환·2023년 8월 12일
0

자바[디자인패턴]

목록 보기
3/3

출처 | https://www.youtube.com/watch?v=hPTqWJm51Vs&list=PLe6NQuuFBu7FhPfxkjDd2cWnTy2y_w_jZ&index=4

Templete

어떤 기능에 대해 실행 되어야 할 각 단계에 대한 순서만을 정해놓고, 각 단계에 대한 세부 구현은 상황에 맞게 다르게 구현 할 수 있도록 하는 것.

그림[위]를 보면 단계1, 단계2, 단계3으로 나눠져있다. 단계1~3까지 구체적인 코드가 정해지진 않았다. 이 3단계에 대한 구현 코드는 상황에 맞게 구현된다.

  • 구현 A는 단계1,2,3에 대해 실제 코드로 구현된 경우

  • 구현 B는 구현 A와 다르게 구현된 경우 어떤 상황에서는 A가 실행

  • DisplayArticleTemplate은 아직 구현되지 않은 각 단계에 순서대로 실행해주는 클래스다. 순서대로 실행해주는 클래스이다. + 추상클래스로 구현된다.

  • SimpleDisplayArcticleCaptionDisplayArticle은 구체적인 내용을 구현하는 클래스다.

  • Article 클래스는 CaptionDisplayArticle/ SimpleDisplayArcticle에서 얻을 수 있는 클래스이다.

코드

Article

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

CaptionDisplayArticle

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

    }

}

DisplayArticleTemplate

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


}

SimpleDisplayArticle

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

MainEntry

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
profile
아는만큼보인다.

0개의 댓글