demo: implement a factory