Java 설계 모드 - - 작성자 모드(메소드 체인이 있는 내부 작성자 클래스)

2663 단어
이전에 건설자 모델을 배울 때 우리는 서로 다른 형식과 상태의 대상을 구축하는 가장 직접적인 방법은 여러 가지 구조 방법을 구축하고 서로 다른 장면에 따라 서로 다른 실례화 조작을 하는 것이라고 알았다. 그러나 유형이 복잡할 때 필요한 구조 방법도 많아지기 때문에 우리는 건설자 모델을 사용하여 이런 상황을 피할 수 있다.건설자 모델은 또 하나의 문법 방식이 있는데 내부 건설자 유형과 방법 체인의 형식을 이용하여 여러 가지 구조 방법을 구축하는 것을 대체하는 것이다.
방법체인: 특정한 방법을 통해 현재 대상(this)으로 돌아가는 기술을 가리키며 이런 기술을 통해 체인의 형식으로 방법을 호출할 수 있다.
예는 다음과 같습니다.
1. Phone 클래스를 정의하고 메소드 체인이 있는 내부 건설자 클래스를 사용하여 이 Phone 대상을 실례화한다.
package com.bran.builder.type1;

public class Phone {
    private String cpu;
    private String memory;
    private String disk;

    //Getter Setter , , 

    @Override
    public String toString() {
        return "Phone{" +
                "cpu='" + cpu + '\'' +
                ", memory='" + memory + '\'' +
                ", disk='" + disk + '\'' +
                '}';
    }

    // 
    public static Phone.Builder builder(){
        return new Phone.Builder();
    }

    // , 
    private Phone(String cpu, String memory, String disk) {
        this.cpu = cpu;
        this.memory = memory;
        this.disk = disk;
    }

    // , 
    public static class Builder{
        private String cpu;
        private String memory;
        private String disk;

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

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

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

        // 
        public Phone build(){
            return new Phone(cpu,memory,disk);
        }


    }
}

2. 메소드 체인이 있는 내부 작성자 클래스를 사용하여 Phone 객체 인스턴스화 테스트
package com.bran.builder.type1;

public class BuilderTest2 {

    public static void main(String[] args) {
        Phone phone = Phone.builder()
                .cpu(" 855")
                .memory("3g")
                .disk("128g")
                .build();
        System.out.println(phone.toString());
    }
}

3. lombok 패키지의 @Builder 주석도 방법체인이 있는 내부 건설자 클래스의 건설자 모드를 실현할 수 있습니다. 이 실체 클래스에 @Builder 주석을 추가하면 됩니다. 아래와 같습니다.
package com.bran.builder.type1;

import lombok.Builder;
import lombok.ToString;

@Builder
@ToString
public class Phone {
    private String cpu;
    private String memory;
    private String disk;
}

이 @Builder 주석을 더하면 컴파일 과정에서 Phone 클래스의 코드를 다시 구축하고 방법체인이 있는 내부 구축자 클래스를 생성할 수 있다. 우리는 직접 사용하여 Phone 대상을 실례화할 수 있다. 실례화 대상의 테스트 코드는 위의 두 번째 단계와 같다.

좋은 웹페이지 즐겨찾기