state pattern

`Post`는 요청을 받고, 상태 객체가 규칙을 결정한다

사용자는 `Post`만 다루지만 내부에서는 `Draft`, `PendingReview`, `Published`가 전환과 공개 여부를 나눠 가진다.

public API

외부에서 보이는 타입

호출자는 상태 객체를 직접 만들거나 바꾸지 않는다.

post.add_text()
post.request_review()
post.approve()
post.content()
Draft

초안

내용은 저장하지만 아직 노출하지 않는다.

PendingReview

검토 대기

승인 전까지 공개 콘텐츠는 비어 있다.

Published

게시됨

이 상태에서만 `content`가 실제 글을 반환한다.