首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >设计模式--抽象工厂

设计模式--抽象工厂

原创
作者头像
软件架构师Michael
发布2023-06-14 14:22:52
发布2023-06-14 14:22:52
3590
举报

抽象工厂(Abstract Factory)是创建型设计模式之一,它提供了一种创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。抽象工厂模式强调一系列相关的对象的创建,这些对象是属于同一产品族而不同等级结构的。

举个例子,假设我们要开发一个跨平台的计算器应用程序,它需要在Windows系统和Mac OS系统上运行。其中有按钮和文本框两种控件需要在两个系统中展示不同的样式。我们可以使用抽象工厂模式来实现这个应用程序的跨平台支持。

以下是C#的一个抽象工厂模式的简单实现:

代码语言:javascript
复制
// 创建文本框抽象类
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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档