add a demo of abstract factory pattern.