6. Builder Pattern이란?
생성관점
앞서 보았던 html생성하던 코드는 내용(전달받은 내용:입니다.)
을 찍기에는 꽤나 복잡하다. 그리고 printWriter가 순차적으로
실행되어야 한다.
이렇게 객체 생성 시에 복잡하고 얽혀있는 관계들을 단순하게
분리해 낸 것을 builder pattern이라고 한다.
13. Director 클래스 작성
Director 클래스는 builder
클래스에서
정의한 메소드들을 이용해서 실
제 문서를 만드는 역할을 한다.
builder들은 공통된 메소드들을
가지고 있어서 실제로 builder
가 어떤 타입의 문서를 만드는
지는 director가 알 필요가 없다.
servlet에서 사용하기 때문에
여기서는 편의상 close메소드를
이용해서 문자열을 반환하기로
했다.
14. Director 클래스 리펙토링1
문서를 생성하는 construct안에 요소를 생성하는 메소드의 파라
메터 하드코딩 제거
public String construct(String type, String header,
String data){
builder = factory.createBuilder(type);
builder.makeRoot( type );
builder.makeHeader( header );
builder.makeBody( data );
return builder.close();
}
}
15. Director 클래스 리펙토링2
builder는 추상클래스라 직접적인 인스턴스 생성이 안됨
안되는데 왜 생성자에서 전달받고 있나. factory한테 넘기자
private Builder builder;
BuilderFactory factory;
public Director() {
factory = new BuilderFactory();
}
이제 director는 builder타입 인자 안 받고 그냥 딱 생성하는
걸로
16. factory클래스 추가
나의 type별 builder 생성을 서블릿에게 알리지 말라.
public Builder createBuilder(String type){
Builder builder = null;
if( type.equals("html") )
{
builder = new HTMLBuilder();
}
else if( type.equals("xml") )
{
builder = new XMLBuilder();
}
return builder;
}
18. 기존 서블릿 if문과의 이별
쫌 이제 우리 그만 좀 헤어지자.
PrintWriter out = resp.getWriter();
String type = req.getParameter("docType") == null ?
"html" : req.getParameter("docType");
Director director = new Director();
out.println(director.construct(type, "builder pattern servlet",
“content 1234"));