Well I was wondering if this is considered a good example of using builder pattern. Let's say you have a user private message system. You can create a class called PrivateMessage which uses data from your database table prefix_privatemessages. You are happy and everything is fine, but soon you realize that the system is not working well for new private messages being composed. New private messages do not have data stored in your database yet, and it will be a pain to accommodate for them by editing the constructor and subsequent methods to deal with them. A better idea may be to create a private message builder class, which is specialized at creating new private messages, validating them before inserting into database, and finally producing a concrete private message object if asked. Of course we can also create a different class called NewPrivateMessage which handles private messages not yet inserted into database, but I wonder whether it will be better and more efficient than PrivateMessageBuilder?