public IWindow Create() { if (os != OsType.Windows) { throw new NotImplementedException(); } else { var window = new WindowsWindow(title, dimensions /* ... */); window.Initialize(); window.DoSomeComplexSetup(); return(window); } }