Homework for abstract Factory design pattern.