public interface IButton: IWidget {}
public interface ITextbox: IWidget {}
public class MaterialButton: IButton
Console.WriteLine("Material Button");
public class MaterialTextbox : ITextbox
Console.WriteLine("Material Textbox");
public class AntButton : IButton
Console.WriteLine("Ant Button");
public class AntTextbox: ITextbox
Console.WriteLine("Ant Textbox");
public interface IWidgetFactory
ITextbox CreateTextbox();
public class MaterialWidgetFactory : IWidgetFactory
public IButton CreateButton()
return new MaterialButton();
public ITextbox CreateTextbox()
return new MaterialTextbox();
public class AntWidgetFactory : IWidgetFactory
public IButton CreateButton()
public ITextbox CreateTextbox()
public void Render(IWidgetFactory widgetFactory)
widgetFactory.CreateTextbox().Render();
widgetFactory.CreateButton().Render();
public static void Main()
new ContactForm().Render(new MaterialWidgetFactory());