Abstract Factory
Merge remote-tracking branch 'refs/remotes/origin/master'