Я думаю, что это определенно стандартная модель наследования.Создайте базовый класс Parent
, который реализует common_method1
и common_method2
.Создайте классы A1
и A2
, которые наследуются от Parent
.
Если вам нужно создать какой-то особый регистр в одном из методов common_method1
или common_method2
в A1
или A2
, сделайте методы virtual
в Parent
.
Реализуйте foo1
и foo2
соответственно A1
и A2
.
РЕДАКТИРОВАТЬ: Если я вас правильно понимаюВы хотите создать фабрику, которая возвращает ссылку на тип Parent
(абстрактный класс).Если вы хотите всегда foo1
для A1
объектов и foo2
для A2
объектов, просто создайте виртуальный метод bar
в интерфейсе Parent
, который при переопределении в A1
просто вызоветfoo1
, и, переопределенный в A2
, просто вызовет foo2
.