design pattern -- structural pattern