Right now, you have to do:
auto pattern = std::make_shared<PatternType>(params);
auto material = std::make_shared<Material>(pattern);
This could all be one much easier step as this is how it is always used:
auto material = PatternType::createPattern(params);