Estoy agregando y reemplazando dinámicamente controles en un panel de winform en tiempo de ejecución¿Cómo se puede reemplazar la herencia con interfaces en el patrón de fábrica?
Aunque todos los trabajos me han indicado que implemente interfaces en lugar de heredar desde un baseUserControl.
estoy a favor de ella, pero yo no veo cómo puedo conseguir el mismo resultado utilizando interfaces
¿Cómo puedo codificar mi fábrica?
¿Cómo se puede mejorar esto y usar interfaces en su lugar?
//Simplified noddy example
//Client code
var controlA = ControlFactory
.Create("UserControlA") as UserControlA;
panel1.Controls.Add(ControlA);
//Factory
public class ControlFactory
{
public static BaseUserControl Create(string name)
{
switch (name)
{
case "UserControlA":
var userControlA = new UserControlA();
return userControlA;
case "UserControlB":
var userControlB = new UserControlB();
return userControlB;
}
return null;
}
}
//BaseUserControl
public partial class BaseUserControl : UserControl
{
public BaseUserControl()
{
InitializeComponent();
}
public virtual void DoSomething()
{
}
}
public partial class UserControlA : BaseUserControl
{
public UserControlA()
{
InitializeComponent();
}
public override void DoSomething()
{
//Do something here
}
}
public partial class UserControlB : BaseUserControl
{
public UserControlB()
{
InitializeComponent();
}
public override void DoSomething()
{
//Do something here
}
}
parece una pregunta para http://codereview.stackexchange.com/ – GolfWolf
¿Por qué? ¿Cuál sería la ventaja de usar interfaces sobre la clase base? – Oded
Estos no son exclusivos. Su IUserControl puede declarar DoSomething(), y puede implementar BaseControl como implementación de IUserControl (y devolver un IUserControl de fábrica). – Joe