그래 픽 디자인 모드 -- Builder (작성 자 모드)

4960 단어
복잡 한 실례 를 조립 하 다
빌 더 모드
먼저 이 물 체 를 구성 하 는 각 부분 을 건조 한 후에 단계별 로 그것들 을 조립 한다.
예제 프로그램
Builder.java(Builder)
package builder;

public abstract class Builder {
    public abstract void makeTitle(String title);
    public abstract void makeString(String string);
    public abstract void makeItems(String[] items);
    public abstract void close();
}

Director.java(Direcor)
package builder;

public class Director {
    private Builder builder;

    public Director(Builder builder) {      //          Builder     
        this.builder = builder;             //           builder    
    }

    public void construct() {
        builder.makeTitle("Greeting");
        builder.makeString("      ");
        builder.makeItems(new String[]{
                "   。",
                "   。"
        });
        builder.makeString("  ");
        builder.makeItems(new String[]{
                "   。",
                "  。",
                "  。"
        });
        builder.close();
    }
}

TextBuilder.java(ConcreteBuilder)
package builder;

public class TextBuilder extends Builder {
    private StringBuffer buffer = new StringBuffer();

    public void makeTitle(String title) {
        buffer.append("===============================
"); buffer.append("【" + title + "】
"); buffer.append("
"); } public void makeString(String string) { buffer.append("◼︎" + string + "
"); buffer.append("
"); } public void makeItems(String[] items) { for (int i = 0; i < items.length; i++) { buffer.append(" -" + items[i] + "
"); } buffer.append("
"); } public void close() { buffer.append("===============================
"); } public String getResult() { return buffer.toString(); } }

HTMLBuilder.java(ConcreteBuilder)
package builder;

import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;

public class HTMLBuilder extends Builder {
    private String filename;
    private PrintWriter writer;

    public void makeTitle(String title) {
        filename = title + ".html";
        try {
            writer = new PrintWriter(new FileWriter(filename));
        } catch (IOException e) {
            e.printStackTrace();
        }
        writer.println("" + title + "");
        writer.println("

" + title + "

"); } public void makeString(String string) { writer.println("

" + string + "

"); } public void makeItems(String[] items) { writer.println("
    "); for (int i = 0; i < items.length; i++) { writer.println("
  • " + items[i] + "
  • "); } writer.println("
"); } public void close() { writer.println(""); } public String getResult() { return filename; } }

Main.java(Client)
package builder;

public class Main {

    public static void main(String[] args) {
        if (args.length != 1) {
            usage();
            System.exit(0);
        }

        if (args[0].equals("plain")) {
            TextBuilder textBuilder = new TextBuilder();
            Director director = new Director(textBuilder);
            director.construct();
            String result = textBuilder.getResult();
            System.out.println(result);
        } else if (args[0].equals("html")) {
            HTMLBuilder htmlBuilder = new HTMLBuilder();
            Director director = new Director(htmlBuilder);
            director.construct();
            String filename = htmlBuilder.getResult();
            System.out.println(filename + "      。");
        } else {
            usage();
            System.exit(0);
        }
    }

    public static void usage() {
        System.out.println("Usage: java Main plain          ");
        System.out.println("Usage: java Main html      HTML   ");
    }

}

Builder 모드 의 등장 캐릭터
  • Builder (건설 자) Builder 역할 은 사용자 가 인 스 턴 스 를 생 성 하 는 인 터 페 이 스 를 정의 합 니 다.Builder 캐릭터 에 인 스 턴 스 를 만 드 는 방법 이 준비 되 어 있 습 니 다.
  • ConcreteBuilder (구체 적 인 건설 자) ConcreteBuilder 역할 은 Builder 역할 을 실현 하 는 인 터 페 이 스 를 담당 하 는 클래스 입 니 다.또한 ConcreteBuilder 캐릭터 에 서 는 최종 생 성 결 과 를 얻 는 방법 도 정의 했다.
  • Direcor (건설) Direcor 역할 은 Builder 역할 의 인 터 페 이 스 를 사용 하여 인 스 턴 스 를 생 성 합 니 다.그것 은 Builder 역할 에서 정 의 된 방법 만 호출 합 니 다.
  • Client (사용자)
  • 사고의 방향 을 넓히다.
    Q: 뭘 아 는 사람
    A: Diecor 류 는 자신 이 Builder 의 어떤 하위 클래스 를 사용 하 는 지 모 릅 니 다.하위 클래스 를 몰라 야만 교체 할 수 있 기 때문이다.

    좋은 웹페이지 즐겨찾기