Почему вы не наследуете от базового класса?
Ваша ситуация кажется подходящей для шаблона метода . Я думаю, что наследование является лучшим решением, если нет веских причин не делать этого. В вашем конкретном случае наследование от BaseWidget также кажется логичным шагом.
Примечание: Я знаю, что вы конкретно спрашиваете, как НЕ использовать наследование, но вы не говорите нам, почему. Я думаю, что если кто-то специально просит что-то, что противоречит моим обычным тенденциям в разработке программного обеспечения, он должен объяснить не только что, но и почему, если он не отказывается просто дать ответ (если я знаю это), если я думаю, что просто «дизайн» не так.