Если виджеты выполняют приблизительно одинаковую роль, но отличаются размером или стилем например, то имеет смысл создавать родительский абстрактный класс с интерфесами.
Также возможно, если ваши виджеты приблизительно одинаковые, то к их используемым компонентам присвоить одинаковые id и всю инициалицазию вынести в родительский класс в final void setupIU(){}. Далее наследоваться, ставить нужные contextView в каждом виджете.
Пример
public class ParentWidget extends AppWidgetProvider {
public final void setUI(){
/* инициализация одинаковых компонентов и действий для наследуемых виджетов*/
}
}
public class ChildWidget0 extends BaseWidget {
onCreate(){
super.OnCreate();
setUI();
}
public class ChildWidget1 extends BaseWidget {
onCreate(){
super.OnCreate();
setUI();
}
А вообще красивее создать нэймспейс *.widgets и туда отдельными классами в .java сохранять
Наследование только сократит количество кода, и добавит качественную характеристику в отсутствии дублирования кода. Оптимизация.