Builder Pattern - DanielWorld/SoftwareTech GitHub Wiki

Builder Pattern μ΄λž€?

μƒμ„±μž (constructor) 의 μΈμžκ°’λ“€μ„ λ‹€μ–‘ν•˜κ²Œ μ‘°ν•©ν•΄μ„œ μ‚¬μš©ν•΄μ•Ό ν•  λ•Œ,
μƒμ„±μž (constructor) κ°€ 쓸데없이 λ§Žμ•„μ§€λŠ” μ½”λ“œλ₯Ό λ°©μ§€ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•˜λŠ” Design Pattern

클래슀 내뢀에 Builder ν΄λž˜μŠ€κ°€ μ‘΄μž¬ν•˜μ—¬ Builder λ₯Ό μ΄μš©ν•΄ ν•„μš”ν•œ κ°’λ“€λ§Œ 받을 수 μžˆλ„λ‘ ν•˜λ©°, Builder μΈμŠ€ν„΄μŠ€λ₯Ό 클래슀의 ν™•μž₯자 인자둜 λ°›μ•„ μƒμ„±λœ 클래슀 μΈμŠ€ν„΄μŠ€λ‘œλ§Œ μ ‘κ·Ό κ°€λŠ₯ν•˜λ„λ‘ ν•˜λŠ” λ””μžμΈ νŒ¨ν„΄

예λ₯Ό λ“€μ–΄, A μ„œλΉ„μŠ€μ— μ ‘κ·Όν•  수 μžˆλŠ” access token 을 μƒμ„±ν•˜λŠ” 라이브러리λ₯Ό λ§Œλ“€μ–΄ 외뢀에 λ°°ν¬ν•œλ‹€κ³  κ°€μ •μ‹œ μ™ΈλΆ€ 3rd party 의 상황에 λ”°λΌμ„œ ν•„μš”ν•œ μΈμžκ°’λ“€μ΄ λ‹€ λ™μΌν•˜μ§€ μ•Šμ„ 수 μžˆλ‹€.

  1. λ‚˜λŠ” custom domain url을 μ„€μ •ν•΄μ„œ ν…ŒμŠ€νŠΈ ν•˜κ³  μ‹Άμ–΄.
  2. λ‚˜λŠ” A μ„œλ²„μŠ€ μ•±μœΌλ‘œ λΆ€ν„° access token 을 λ°›λŠ” 것이 μ•„λ‹ˆλΌ μ›ΉλΈŒλΌμš°μ €λ₯Ό ν†΅ν•΄μ„œ access token 을 κ°€μ Έμ˜€κ³  싢은데?
  3. 우리 μ„œλΉ„μŠ€μ—λŠ” ν•„μš”μ—†λŠ” 값듀을 μ™œ μƒμ„±μžμ— 넣도둝 μš”κ΅¬ν•˜λŠ”κ±°μ•Ό? ν—·κ°ˆλ €..

μ½”λ“œ μ˜ˆμ‹œ

public class FrameworkSettings {

    private String clientId;
    private String clientSecret;
    private String firmwareVersion;
    private String extraInfo;
    private String modelId;

    FrameworkSettings(Builder builder) {
        this.clientId = builder.clientId;
        this.clientSecret = builder.clientSecret;
        this.firmwareVersion = builder.firmwareVersion;
        this.extraInfo = builder.extraInfo;
        this.modelId = builder.modelId;
    }

    public String getClientId() {
        return clientId;
    }

    public String getClientSecret() {
        return clientSecret;
    }

    public String getFirmwareVersion() {
        return firmwareVersion;
    }

    public String getExtraInfo() {
        return extraInfo;
    }

    public String getModelId() {
        return modelId;
    }

    public static class Builder {

        private String clientId;
        private String clientSecret;
        private String firmwareVersion;
        private String extraInfo;
        private String modelId;

        public Builder setClientId(String clientId) {
            this.clientId = clientId;
            return this;
        }

        public Builder setClientSecret(String clientSecret) {
            this.clientSecret = clientSecret;
            return this;
        }

        public Builder setFirmwareVersion(String firmwareVersion) {
            this.firmwareVersion = firmwareVersion;
            return this;
        }

        public Builder setExtraInfo(String extraInfo) {
            this.extraInfo = extraInfo;
            return this;
        }

        public Builder setModelId(String modelId) {
            this.modelId = modelId;
            return this;
        }

        public FrameworkSettings build() {
            if (clientId == null)
                throw new RuntimeException("ClientId can't be null!");

            return new FrameworkSettings(this);
        }
    }
}
⚠️ **GitHub.com Fallback** ⚠️