In this design pattern, a contract is defined for creating an object. All derieved classes who implements this policy(via virtual method or implementing an interface ) decide which object in a class heirarchy to instantiate. class Creator { virtual MyObject CreateObject(); } Creator defines a contract that all its derieved classes expose a method "CreateObject" which should return an object which "IS" a MyObject. class MyObject { } class MyConcreteObject : MyObject { } class MyOtherConcreteObject : MyObject { } MyConcreteObject and MyOtherConcreObject are different flavour of MyObject.Each of the class share IS relationship with MyObject. Let's implement few "Creators". class MyConcereteObjectCreater : Creator { virtual MyObject CreateObject() { return new MyConcreteObject(); ...