Updated class pattern to support any order for with sharing, abstract and virtual