design pattern
java IO