Rust · State Pattern

상태 객체로 게시 흐름 숨기기

사용자는 `Post`의 공개 메서드만 호출하고, 초안·검토·게시 규칙은 `State` 트레이트를 구현한 비공개 상태 객체가 맡습니다.

public API

사용자가 보는 표면

Post::new

항상 `Draft` 상태 객체를 담은 게시물로 시작합니다.

add_text

본문은 저장하지만, 공개 여부는 상태가 결정합니다.

request_review

현재 상태 객체를 소비하고 다음 상태 객체로 교체합니다.

approve

검토 대기 상태에서만 게시 상태로 의미 있게 전환됩니다.

private state

상태가 나누어 맡는 규칙

Draft

`content`는 빈 문자열입니다. 검토 요청을 받으면 `PendingReview`로 넘어갑니다.

PendingReview

본문은 아직 숨깁니다. 승인되면 `Published` 객체를 반환합니다.

Published

`content`를 오버라이드해 저장된 `post.content`를 반환합니다.

전환은 소유권 이동

`self: Box<Self>`가 이전 상태를 소비하므로 `Post`는 새 상태만 보유합니다.

위임은 한 지점

`Post::content`는 상태 객체의 `content(self)`로 판단을 넘깁니다.