я пытаюсь применить шаблон Decorator Design к следующей ситуации:Применяя декоратор к формам
У меня есть 3 различных вида форм: зеленый, желтый, красный.
Теперь каждая из этих форм может иметь различный набор атрибутов. У них может быть отключено окно минимума, отключено окно с максимальным полем, и они всегда могут быть на высоте.
Я попытался смоделировать это следующим образом:
Form <---------------------------------------FormDecorator
/\ /\
|---------|-----------| |----------------------|-----------------|
GreenForm YellowForm RedForm MinimizeButtonDisabled MaximizedButtonDisabled AlwaysOnTop
Вот мой GreenForm код:
public class GreenForm : Form {
public GreenForm() {
this.BackColor = Color.GreenYellow;
}
public override sealed Color BackColor {
get { return base.BackColor; }
set { base.BackColor = value; }
}
}
FormDecorator:
public abstract class FormDecorator : Form {
private Form _decoratorForm;
protected FormDecorator(Form decoratorForm) {
this._decoratorForm = decoratorForm;
}
}
и, наконец, NoMaximizeDecorator:
public class NoMaximizeDecorator : FormDecorator
{
public NoMaximizeDecorator(Form decoratorForm) : base(decoratorForm) {
this.MaximizeBox = false;
}
}
Так вот работает код:
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(CreateForm());
}
static Form CreateForm() {
Form form = new GreenForm();
form = new NoMaximizeDecorator(form);
form = new NoMinimizeDecorator(form);
return form;
}
Проблема заключается в том, что я получаю форму, которая не зеленый, а еще позволяет мне развернуть его. Он учитывает только форму NoMinimizeDecorator. Я понимаю, почему это происходит, но мне трудно понять, как сделать эту работу с этим шаблоном.
Я знаю, что, возможно, есть лучшие способы достижения того, чего я хочу. Я сделал этот пример попыткой применить шаблон Decorator к чему-то. Может быть, это был не лучший образец, который я мог бы использовать (если вообще) для такого сценария. Есть ли другой образец, более подходящий, чем Decorator для достижения этого? Я что-то делаю неправильно при попытке реализовать шаблон Decorator?
Благодаря
+1. Это «немного уродливо», но я считаю, что у него есть потенциал. –