トップレベルのウィンドウをそのまま AbstractFactory にしてみるとか

Window *w = new W32Window();
Button *b = w->CreateButton();