У меня есть сценарий использования для рисования некоторой машины в программном обеспечении CAO, которую пользователь может настроить (например, установка длины, если опция должна отображаться графически или нет, и т. Д. c.). Это делается с помощью программного обеспечения (Autocad) с использованием динамических c свойств, слоев или блоков для отображения / скрытия, поэтому с другими типами поведения. Количество возможных вариантов варьируется от одного оборудования к другому, и у нас часто появляются новые параметры для наших продуктов.
Я начал использовать шаблон декоратора для управления различными параметрами оборудования. Моя главная проблема сейчас заключается в том, что некоторые значения параметров являются взаимозависимыми (мне нужно, например, текущее значение текущего декоратора, умноженное на значение другого ..., которое может быть перенесено в первый декоратор или может обернуть его).
Есть ли у вас какие-либо подсказки, если: - Чего я хочу добиться, возможно в границах шаблона декоратора? - Я совершенно не прав и должен использовать другой тип шаблона проектирования для моего варианта использования?
Вот несколько упрощенных материалов моей реализации:
Мой компонентный интерфейс
public interface Component
{
void Draw();
void Store();
}
У меня есть класс «machine», который представляет основную c информацию о машине, которая является фиксированной:
public class Machine : Component
{
public int MachineID { get; set; }
public void Draw()
{
//Do some stuff
}
public void Store()
{
//Do some stuff
}
}
Аннотация класс, представляющий параметры:
public abstract class Parameter : Component
{
internal string ParameterName;
internal string Value;
internal Component BaseComponent;
public Parameter(string _parameterName, string _value, Component _component)
{
ParameterName = _parameterName;
Value = _value;
BaseComponent = _component;
}
public abstract void Draw();
public void Store()
{
//Do store data in the drawing (same procedure for any parameter)
}
}
И конкретный класс параметров:
public class ConcreteParameter : Parameter
{
internal string SomeAdditionalMember;
public ConcreteParameter(string _parameterName, string _value, Component _component) : base(_parameterName, _value, _component) { }
public override void Draw()
{
this.BaseComponent.Draw();
//Draw in a specific way in addition to parent drawing
}
}
Заранее благодарим за любые советы по топи c!