KKLite training
1. Template pattern
2. Observer pattern