1. 程式人生 > >構建者模式-Builder

構建者模式-Builder

接口 lose builder str 參數 his 控制 它的 tostring

構建者模式-Builder

Builder模式是一步一步創建一個復雜對象的創建型模式,它允許用戶在不知道內部構建細節的情況下,可以更精細地控制對象的構造流程。該模式是為了將構建復雜對象的過程和它的部件解耦,使得構建過程和部件的表示隔離開來

Builder接口

定義了構建者的方法.

public interface Builder {
    void makeTitle(String title);

    void makeString(String str);

    void makeItems(String[] items);

    void close();
}

TextBuilder類

這是Builder接口的一個具體實現, 用於根據輸入構建出類似Markdown風格的內容

public class TextBuilder implements Builder {
    private StringBuffer out = new StringBuffer();

    @Override
    public void makeTitle(String title) {
        out.append("==============================\n");
        out.append("『 " + title + " 』\n");
        out.append("\n");
    }

    @Override
    public void makeString(String str) {
        out.append("■ " + str + "\n");
        out.append("\n");
    }

    @Override
    public void makeItems(String[] items) {
        for (int i = 0; i < items.length; i++) {
            out.append(" ?" + items[i] + "\n");
        }
        out.append("\n");
    }

    @Override
    public void close() {
        out.append("==============================\n");
    }

    public String getResult() {
        return out.toString();
    }
}

  

Director類

這是一個指揮官, 利用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();                            // 完成文檔
    }
}

Main

本類用於運行測試

public class Main {
    public static void main(String[] args) {
        // 構建者
        TextBuilder textbuilder = new TextBuilder();
        
        // 指揮者
        Director director = new Director(textbuilder);
        
        // 構建
        director.construct();
        
        // 構建好的內容
        System.out.println(textbuilder.getResult());
    }
}

  

構建者模式-Builder