抽象工厂模式是一种创建型设计模式,它提供了一种方式,可以将一组具有同一主题的单独的工厂封装起来。在编程中,抽象工厂用于处理大量相关的依赖关系,而不需要指定它们具体的类。
抽象工厂模式通常适用于以下场景:
C#//接口IButton
public interface IButton
{
string Paint();
}
C#//接口ICheckBox
public interface ICheckBox
{
string Paint();
}
C#public class MacButton : IButton
{
public string Paint()
{
return "Mac 样式的Button";
}
}
C#public class MacCheckBox: ICheckBox
{
public string Paint()
{
return "Mac 样式的Checkbox";
}
}
C#public class WinButton : IButton
{
public string Paint()
{
return "Window 样式按钮";
}
}
C#public class WinCheckBox : ICheckBox
{
public string Paint()
{
return "Window 样式CheckBox";
}
}
C#// 抽象工厂
public interface IGUIFactory
{
IButton CreateButton();
ICheckBox CreateCheckBox();
}
C#//Mac 具体工厂
internal class MacFactory : IGUIFactory
{
public IButton CreateButton()
{
return new MacButton();
}
public ICheckBox CreateCheckBox()
{
return new MacCheckBox();
}
}
C#// Windows 具体工厂
internal class WinFactory : IGUIFactory
{
public IButton CreateButton()
{
return new WinButton();
}
public ICheckBox CreateCheckBox()
{
return new WinCheckBox();
}
}
界面开发
C#private void btnMac_Click(object sender, EventArgs e)
{
//通过工厂创建了button与checkbox
MacFactory factory=new MacFactory();
IButton button=factory.CreateButton();
ICheckBox checkBox=factory.CreateCheckBox();
MessageBox.Show(button.Paint());
MessageBox.Show(checkBox.Paint());
}
private void btnWindows_Click(object sender, EventArgs e)
{
//通过工厂创建了button与checkbox
WinFactory factory = new WinFactory();
IButton button = factory.CreateButton();
ICheckBox checkBox = factory.CreateCheckBox();
MessageBox.Show(button.Paint());
MessageBox.Show(checkBox.Paint());
}
IGUIFactory
是抽象工厂,MacFactory
和WinFactory
是具体工厂,IButton
和ICheckBox
是抽象产品,MacButton
、MacCheckBox
、WinButton
和WinCheckBox
是具体产品。
客户端代码选择并创建一个具体工厂,然后使用这个工厂创建产品。这样,客户端代码与具体产品类解耦,只依赖于抽象产品类和抽象工厂。
本文作者:技术老小子
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!