반응형
생성패턴 - Builer
해결하려는 문제
- 복잡한 객체의 생성 방법과 표현 방법을 분리해야함
- 생성 방법과 구성 방법 모두 캡슐화 해야함
- (ex. 객체 생성에 필요한 파라미터가 너무 많아, 생성자 오버로딩이 과함)
public class Main {
public staic void main(String[] args) {
SimpleUser simpleUser = new SimpleUser();
SimpleUser simpleUser = SimpleUser.builder()
.id(1L)
.name("제로베이스")
.age(25)
.address("서울시")
.phoneNumber("010-1234-5678")
.build();
SimpleUser simpleUser = SimpleUser.builder()
.userInfo(new UserInfo())
.userAddress(new UserAddress())
.build();
}
}
public class SimpleUser {
private long id;
private String name;
private int age;
private String address;
private String phoneNumber;
private SimpleUser() {
}
public SimpleUser(SimpleUserBuilder simpleUserBuilder) {
this.id = simpleUserBuilder.uesrInfo.getId();
this.name = simpleUserBuilder.uesrInfo.getName();
this.age = simpleUserBuilder.uesrInfo.getAge();
this.address = simpleUserBuilder.address.mergedAddress();
this.phoneNumber = simpleUserBuilder.uesrInfo.getPhoneNumber();
}
public static SimplerUserBuilder builder() {
return null;
}
public static class SimpleUserBuilder {
private UserInfo userInfo;
private UserAddresss userAddress;
public SimpleUserBuilder userInfo(UserInfo userInfo) {
this.userInfo = userInfo;
return this;
}
public SimpleUserBuilder userAddress(UserAddress userAddress) {
this.userAddress = userAddress;
return this;
}
public SimpleUser build() {
// return new SimpleUser(this);
SimpleUser simpleUser = new SimpleUser();
simpleuser.id = userInfo.getId();
}
}
}
import lombok.Getter;
@Getter
public class UserInfo {
private long id;
private String name;
private int age;
private String phoneNumber;
}
import lombok.Getter;
@Getter
public class UserAddress {
private String city;
private String citySubName;
private String contryName;
public String mergedAddress() {
return city + citySubName + countryName;
}
반응형
'cs > java-spring-boot' 카테고리의 다른 글
[Zero-base] 11-5. 어댑터(Adaptor) (0) | 2022.03.15 |
---|---|
[Zero-base] 11-4. 팩토리(Factory) (0) | 2022.03.15 |
[Zero-base] 11-2. 싱글턴(Singleton) (0) | 2022.03.15 |
[Zero-base] 11-1. 디자인 패턴과 가독성 (0) | 2022.03.15 |
[Zero-base] 10-6. 의존성 다루기 (0) | 2022.03.12 |