抽象工厂模式(AbstractFactoryPattern)

1.抽象工厂模式定义

提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 工厂方法模式是单一产品族,抽象工厂方模式是多系列产品族。

2.UML类图

在这里插入图片描述

  • 抽象工厂:声明了创建抽象产品对象的操作接口。
  • 具体产品工厂:实现了抽象工厂的接口,负责创建产品对象。
  • 产品抽象类或接口:定义一类产品对象的接口。
  • 具体产品实现:定义一个将被相应具体工厂创建的产品对象。

3.抽象工厂模式具体实现

本文基于生产电脑周边产品的例子

工厂模式实现单一产品族

public abstract class Keyboard 
{
    // 生产键盘
    public abstract void Create();
}

public class HPKeyboard : Keyboard
{
    public override void Create()
    {
        Console.WriteLine("生产惠普键盘");
    }
}

public class DellKeyboard : Keyboard
{
    public override void Create()
    {
        Console.WriteLine("生产戴尔键盘");
    }
}

public class LenovoKeyboard : Keyboard
{
    public override void Create()
    {
        Console.WriteLine("生产联想键盘");
    }
}

// 键盘工厂抽象类
public abstract class KeyboardFactory
{
    // 取得键盘实例
    public abstract Keyboard GetInstance();
}

public class HPKeyboardFactory : KeyboardFactory
{
    public override Keyboard GetInstance()
    {
        return new HPKeyboard();
    }
}

public class DellKeyboardFactory : KeyboardFactory
{
    public override Keyboard GetInstance()
    {
        return new DellKeyboard();
    }
}

public class LenoveKeyboardFactory : KeyboardFactory
{
    public override Keyboard GetInstance()
    {
        return new LenovoKeyboard();
    }
}

使用:

// 生产惠普键盘
new HPKeyboardFactory().GetInstance().Create();
// 生产戴尔键盘
new DellKeyboardFactory().GetInstance().Create();
// 生产联想键盘
new LenoveKeyboardFactory().GetInstance().Create();

抽象工厂实现多产品族

产品类

// 鼠标抽象类
public abstract class Mouse
{
    public abstract void Create();
}

public class DellMouse : Mouse
{
    public override void Create()
    {
        Console.WriteLine("生产戴尔鼠标");
    }
}

public class HPMouse : Mouse
{
    public override void Create()
    {
        Console.WriteLine("生产惠普鼠标");
    }
}

// 显示器抽象类
public abstract class Monitor
{
    public abstract void Create();
}

public class DellMonitor : Monitor
{
    public override void Create()
    {
        Console.WriteLine("生产戴尔显示器");
    }
}

public class HPMonitor : Monitor
{
    public override void Create()
    {
        Console.WriteLine("生产惠普显示器");
    }
}

工厂类

// 工厂抽象类。工厂分为Dell工厂和HP工厂,各自负责品牌内产品的创建
public abstract class Factory
{
    public abstract Keyboard CreateKeyboard();
    public abstract Mouse CreateMouse();
    public abstract Monitor CreateMonitor();
}

public class DellFactory : Factory
{
    public override Keyboard CreateKeyboard()
    {
        return new DellKeyboard();
    }

    public override Monitor CreateMonitor()
    {
        return new DellMonitor();
    }

    public override Mouse CreateMouse()
    {
        return new DellMouse();
    }
}

public class HPFactory : Factory
{
    public override Keyboard CreateKeyboard()
    {
        return new HPKeyboard();
    }

    public override Monitor CreateMonitor()
    {
        return new HPMonitor();
    }

    public override Mouse CreateMouse()
    {
        return new HPMouse();
    }
}

使用

// 抽象工厂模式
Console.WriteLine("----------------------- 抽象工厂模式 ----------------------------");
new DellFactory().CreateKeyboard().Create();    // 生产戴尔键盘
new DellFactory().CreateMonitor().Create();     // 生产戴尔显示器
new DellFactory().CreateMouse().Create();       // 生产戴尔鼠标

new HPFactory().CreateKeyboard().Create();      // 生产惠普键盘
new HPFactory().CreateMonitor().Create();      // 生产惠普显示器
new HPFactory().CreateMouse().Create();      // 生产惠普鼠标

4.抽象工厂模式优缺点

  • 优点:当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。
  • 缺点:产品族扩展非常困难,要增加一个系列的某一产品,既要在抽象的 Creator 里加代码,又要在具体的里面加代码。
  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值