최근 포토로그


2008/09/03 23:44

[DesignPattern - Decorator] sample1 study. note

Design Pattern - Decorator

1. 클래스다이어그램
2. Source
  • Display.java
    package com.dazzilove.decorator.sample1;

    public abstract class Display {
    public abstract int getColumns();
    public abstract int getRows();
    public abstract String getRowText(int row);
    public final void show() {
    for(int i=0; i System.out.println(getRowText(i));
    }
    }
    }
  • StringDisplay.java
    package com.dazzilove.decorator.sample1;

    public class StringDisplay extends Display {
    private String string;
    public StringDisplay(String string) {
    this.string = string;
    }
    @Override
    public int getColumns() {
    return string.getBytes().length;
    }
    @Override
    public int getRows() {
    return 1;
    }
    @Override
    public String getRowText(int row) {
    if(row == 0) {
    return string;
    } else {
    return null;
    }
    }
    }
  • Border.java
    package com.dazzilove.decorator.sample1;

    public abstract class Border extends Display {
    protected Display display;
    protected Border(Display display) {
    this.display = display;
    }
    }
  • SideBorder.java
    package com.dazzilove.decorator.sample1;

    public class SideBorder extends Border {
    private char borderChar;
    public SideBorder(Display display, char ch) {
    super(display);
    this.borderChar = ch;
    }

    @Override
    public int getColumns() {
    return 1 + display.getColumns() + 1;
    }

    @Override
    public int getRows() {
    return display.getRows();
    }

    @Override
    public String getRowText(int row) {
    return borderChar + display.getRowText(row) + borderChar;
    }
    }
  • FullBorder.java
    package com.dazzilove.decorator.sample1;

    public class FullBorder extends Border {
    public FullBorder(Display display) {
    super(display);
    }
    @Override
    public int getColumns() {
    return 1 + display.getColumns() + 1; // 문자의 수는 내용물의 양쪽에 좌우의 장식 문자 개수를 더한 것
    }
    @Override
    public int getRows() {
    return 1 + display.getRows() + 1; // 줄 수는 내용물의 줄 수에 상하의 장식문자분을 더한 것
    }
    @Override
    public String getRowText(int row) {
    if(row == 0) { // 장식의 상단
    return "+" + makeLine('-', display.getColumns()) + "+";
    } else if(row == display.getRows() + 1) { // 장식의 하단
    return "+" + makeLine('-', display.getColumns()) + "+";
    } else { // 그밖에
    return "|" + display.getRowText(row - 1) + "|";
    }
    }
    private String makeLine(char ch, int count) {
    StringBuffer sb = new StringBuffer();
    for(int i=0; i sb.append(ch);
    }
    return sb.toString();
    }
    }
  • Main.java
    package com.dazzilove.decorator.sample1;

    public class Main {
    public static void main(String[] args) {
    Display display1 = new StringDisplay("Hello, world.");
    display1.show();
    System.out.println("");

    Display display2 = new SideBorder(display1, '#');
    display2.show();
    System.out.println("");

    Display display3 = new FullBorder(display2);
    display3.show();
    System.out.println("");

    Display display4 = new SideBorder(new FullBorder(new FullBorder(new SideBorder(new FullBorder(new StringDisplay("안녕하세요")), '*'))), '/');
    display4.show();
    }
    }
3. 결과출력

트랙백

이 글과 관련된 글 쓰기 (트랙백 보내기)
TrackbackURL : http://dazzilove.egloos.com/tb/785987 [도움말]

핑백

  • dazzilove : 디자인 패턴 공부 2008-09-03 23:45:36 #

    ... 모두 교체하다.Composite sample1 : "Java 언어로 배우는 디자인 패턴 입문" Chapter11. Composite - 그릇과 내용물의 동일시Decorator sample1 : "Java 언어로 배우는 디자인 패턴 입문" Chapter12. Decorator- 장식과 내용물의 동일시 ... more

덧글

덧글 입력 영역



미투데이

문화꽃 키우기