The design principles in this chapter are taken from a series of articles published by Liang Fei on javaeye.