que estoy tratando de aplicar el patrón decorador diseño a la siguiente situación:aplicar el patrón decorador a las formas
tengo 3 clases diferentes de formas: verde, amarillo, rojo.
Ahora, cada una de esas formas puede tener un conjunto diferente de atributos. Pueden tener un cuadro de minimización deshabilitado, un cuadro maximizado deshabilitado y pueden estar siempre en la parte superior.
Me trataron de modelar esta de la siguiente manera:
Form <---------------------------------------FormDecorator
/\ /\
|---------|-----------| |----------------------|-----------------|
GreenForm YellowForm RedForm MinimizeButtonDisabled MaximizedButtonDisabled AlwaysOnTop
Aquí está mi código 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;
}
}
y finalmente NoMaximizeDecorator:
public class NoMaximizeDecorator : FormDecorator
{
public NoMaximizeDecorator(Form decoratorForm) : base(decoratorForm) {
this.MaximizeBox = false;
}
}
Así que aquí es el código que se ejecuta:
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;
}
El problema es que tengo una forma que no es verde y todavía que me permite maximizarla. Solo toma en consideración el formulario NoMinimizeDecorator. Comprendo por qué sucede esto, pero estoy teniendo problemas para entender cómo hacer que esto funcione con este patrón.
Sé que hay mejores formas de lograr lo que quiero. Hice este ejemplo como un intento de aplicar el Patrón Decorador a algo. Quizás este no fue el mejor patrón que podría haber usado (si es que lo hubiera hecho) para este tipo de escenario. ¿Hay algún otro patrón más adecuado que el Decorador para lograr esto? ¿Estoy haciendo algo mal cuando trato de implementar el Patrón Decorador?
Gracias
+1. Es "un poco feo", pero creo que tiene potencial. –