So here's three complete programs which demonstrate how I would go about evolving some code including a main component called MyThing. The initial implementation would be very direct and very concrete, the next implementation would factor out an interface, and the final implementation would implement MyThing in a full-blown extensible framework. All versions support construction via a MyThing.Create() factory method, thus "construction idioms".
|Take Zero||concrete implementation|
|Take One||introduce interface|
|Take Two||extensible framework|
If you want a copy of the code:
svn co https://svn.jj5.net/svn/public/jjrepo/exp/2017-11-23-000609 .