У меня есть «фреймворк», который выполняет свою работу, если я использую его с помощью кода. Это хорошо, потому что не все системы, на которых будет работать инфраструктура, будут установлены графические элементы.Расширение рамки без GUI с помощью GUI
Теперь я хочу создать графический интерфейс для этой структуры. Поскольку большой, самоуправляемый составной части фреймворка, наконец, запущен, я не хочу создавать параллельную иерархию графического интерфейса и переопределять все элементы управления для графического интерфейса пользователя, а также организовывать. В самом деле, моя идея состоит в том, чтобы создать только расширение для каждого класса, e. г. gui
, которые могут быть включены в основное окно позже. Поэтому, я бы эскиз его следующим образом:
На этой иллюстрации я не люблю множественное наследование. В качестве примера с m2()
показано, что он вводит некоторые проблемы. Здесь речь идет о следующем: «Какой номер m(2)
выполнен ConcreteGui
, обновленный от AbstractGui
или устаревший от AbstractClass
, который пришел с ConcreteClass
?»
Какой подход или шаблон дизайна я могу использовать?
EDIT:
Давайте предположим следующую заданную структуру (это зависит от языка и проблема Python служит только в качестве иллюстрации).
class AbstractClass:
def __init__(self):
self.a = 23
self.b = 42
def m1(self):
return self.a + self.b
def m2(self):
self.b += 1
return self.a * 2
class ConcreteClass1(AbstractClass):
def __init__(self):
super().__init__() # constructor of AbstractClass
self.c = 13
self.d = 7
def m3(self):
return self.a - self.d
def m4(self):
self.a += 1
return self.b/self.c
Теперь каждый атрибут должен получить GUI-виджет как удобное представление (с указанием текущего значения), а также интерфейс (установка значения). Для этого я не хочу переписывать все методы, чтобы использовать конкретный виджет вместо атрибута. Добавленные виджеты должны быть прозрачными для всех уже реализованных методов.
Является ли 'm2()' в 'AbstractGui' чем-то иным, чем 'AbstractClass'? если вы только расширяете «AbstractGui» на «#gui», то почему бы не реализовать это как интерфейс на обоих конкретныхGui (возможно, с инъекцией зависимостей)? – Jegan
Да, 'm2()' 'AbstractGui' отличается от' AbstractClass'. Также возможно (или даже более вероятно), что 'm2()' переопределяется в 'ConcreteClass' вместо' AbstractGui'. Тогда '# gui' может быть интерфейсом, который реализуется' AbstractGui' и 'ConcreteGui', но как атрибуты' a' и 'b'' ConcreteGui' становятся свойствами? – Chickenmarkus
Почему бы не удалить «AbstractGui» и заменить «IGui» или аналогичный, который содержит «+ a и + b свойства виджета и #gui» и реализовать их в каждом классе ConcreteGui, а также вы сможете переопределить + m2() от AbstractClass. – Jegan