생성패턴-빌더패턴,팩토리 메소드 패턴, 추상팩토리 패턴

OneTwoThree·2023년 6월 1일

빌더패턴

  • 복잡한 객체들을 단계별로 생성할 수 있게 하는 패턴
  • 많은 필드를 초기화해야 하는 복잡한 객체
  • 클래스에서 객체 생성 코드를 빼서 Builder 클래스로 만듬
  • 다양한 종류의 빌더를 만들어 다른 방식으로 객체를 생성할 수 있음
//객체 생성에 필수적으로 필요한 매개변수는 빌더 생성시 전달함 
UserBuilder userBuilder = new UserBuilder("jang","jidam");
//빌더의 build 메소드로 User 객체를 생성함 
User user = userBuilder.build();
//빌더의 세터를 통해 필요한 정보를 추가하며 객체를 생성함 
user = userBuilder.setAddress("서울시 강동구").build();
빌더는 필드로 생성하려는 객체의 필드값을 가짐  

class UserBuilder implements Builder {
// 빌더는 생성하려는 객체의 필드값을 가짐 
    private String firstName; 
    private String lastName; private String address 
... 
// 빌더의 생성자에서 필수 매개변수는 필요로함 
public UserBuilder(String firstName, String LastName) { .. } 

// set 메소드로 빌더의 필드들을 초기화함 . 자기자신 this를 반환함 
public UserBuilder setAddress(String adr) { this.address = adr; return this; } 

//build 메소드로 빌더의 필드값들을 이용해 객체를 생성함 User의 생성자를  호출함 
public User build() { 
return new User(firstName, lastName, address , ... ); 
} }

팩토리 메소드 패턴

  • new로 객체생성 하는것을 팩토리 메소드로 대체함(팩토리 메소드 내에서 new로 생성)
  • Creator의 createProduct가 팩토리 메소드임. 반환형은 Product(생성하려는 객체들의 공통 인터페이스)
  • 각 ConcreteCreator가 각 ConcreteProduct를 생성함
  • 각 Product는 공통 인터페이스를 구현함
  • 내 코드와 작동해야 하는 객체들의 정확한 의존관계를 미리 알 수 없는 경우 사용함
  • 생성 코드, 사용 코드를 분리함
  • 새로운 클래스를 추가하기 수월함

추상 팩토리 패턴

  • 생성하려는 객체의 패밀리(의자, 소파, 커피테이블)과 각 객체의 스타일(빅토리안, 모던)이 있음
  • 패밀리의 각 요소에 해당하는 인터페이스를 선언
  • 각 스타일은 인터페이스를 구현
  • 추상 팩토리 인터페이스를 선언
  • 팩토리는 패밀리의 각 객체를 생성함
  • 인터페이스를 구현해 각 디자인에 맞는 패밀리 멤버들을 생성할 수 있게함

  • 클라이언트는 추상적인 인터페이스를 통해 기능을 활용함
  • 코드가 다양한 패밀리와 작동해야 하는데 , 구상 클래스에 의존하고 싶지 않을 떄 사용함

0개의 댓글