
抽象工厂(Abstract Factory)是创建型设计模式之一,它提供了一种创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。抽象工厂模式强调一系列相关的对象的创建,这些对象是属于同一产品族而不同等级结构的。
举个例子,假设我们要开发一个跨平台的计算器应用程序,它需要在Windows系统和Mac OS系统上运行。其中有按钮和文本框两种控件需要在两个系统中展示不同的样式。我们可以使用抽象工厂模式来实现这个应用程序的跨平台支持。
以下是C#的一个抽象工厂模式的简单实现:
// 创建文本框抽象类
public abstract class TextBox
{
public abstract string GetTextBox();
}
// 创建Windows样式(WinTextBox)和Mac OS样式(MacTextBox)的实现类
public class WinTextBox : TextBox
{
public override string GetTextBox()
{
return "Windows 文本框";
}
}
public class MacTextBox : TextBox
{
public override string GetTextBox()
{
return "Mac OS 文本框";
}
}
// 创建按钮抽象类
public abstract class Button
{
public abstract string GetButton();
}
// 创建Windows样式(WinButton)和Mac OS样式(MacButton)的实现类
public class WinButton : Button
{
public override string GetButton()
{
return "Windows 按钮";
}
}
public class MacButton : Button
{
public override string GetButton()
{
return "Mac OS 按钮";
}
}
// 定义抽象工厂类
public abstract class AbstractFactory
{
public abstract Button CreateButton();
public abstract TextBox CreateTextBox();
}
// 定义Windows样式(WinFactory)和Mac OS样式(MacFactory)的具体工厂类
public class WinFactory : AbstractFactory
{
public override Button CreateButton()
{
return new WinButton();
}
public override TextBox CreateTextBox()
{
return new WinTextBox();
}
}
public class MacFactory : AbstractFactory
{
public override Button CreateButton()
{
return new MacButton();
}
public override TextBox CreateTextBox()
{
return new MacTextBox();
}
}
// 客户端代码
public class Client
{
private AbstractFactory factory;
public Client(AbstractFactory factory)
{
this.factory = factory;
}
public void Run()
{
var button = factory.CreateButton();
var textBox = factory.CreateTextBox();
Console.WriteLine(button.GetButton());
Console.WriteLine(textBox.GetTextBox());
}
}
// 用例
var winFactory = new WinFactory();
var macFactory = new MacFactory();
var winClient = new Client(winFactory);
winClient.Run();
var macClient = new Client(macFactory);
macClient.Run();运行上面的代码,它将输出以下内容:

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。