简单工厂模式

示例场景:饮料工厂

假设我们有一个饮料工厂,可以生产咖啡和茶两种饮料。我们希望使用工厂模式来管理对象的创建。

代码实现

cs 复制代码
using System;

namespace SimpleFactoryPattern
{
    // 抽象产品:饮料
    public abstract class Beverage
    {
        public abstract void Prepare();
    }

    // 具体产品:咖啡
    public class Coffee : Beverage
    {
        public override void Prepare()
        {
            Console.WriteLine("Preparing a cup of coffee.");
        }
    }

    // 具体产品:茶
    public class Tea : Beverage
    {
        public override void Prepare()
        {
            Console.WriteLine("Preparing a cup of tea.");
        }
    }

    // 工厂类
    public class BeverageFactory
    {
        public static Beverage CreateBeverage(string type)
        {
            return type.ToLower() switch
            {
                "coffee" => new Coffee(),
                "tea" => new Tea(),
                _ => throw new ArgumentException("Invalid beverage type.")
            };
        }
    }

    // 客户端代码
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Enter the type of beverage (coffee/tea):");
            string type = Console.ReadLine();

            try
            {
                // 使用工厂创建对象
                Beverage beverage = BeverageFactory.CreateBeverage(type);
                beverage.Prepare();
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Error: {ex.Message}");
            }
        }
    }
}

代码说明

  1. 抽象产品 (Beverage)

    • 提供一个基类或接口,定义所有具体产品的通用行为。
  2. 具体产品 (Coffee, Tea)

    • 实现 Beverage 抽象类,并提供具体产品的行为。
  3. 工厂类 (BeverageFactory)

    • 包含一个静态方法 CreateBeverage,根据传入的参数决定创建哪种类型的对象。
  4. 客户端代码 (Main)

    • 客户端无需知道具体产品的创建逻辑,只需要调用工厂方法,并使用返回的对象。

工厂模式的优点

  1. 解耦:客户端与具体产品的创建逻辑解耦,提升代码的可维护性。
  2. 灵活性:易于扩展新产品类型,只需修改工厂类即可。

注意事项

简单工厂模式虽然简单易用,但如果需要支持大量产品类型,可能会导致工厂类过于复杂,此时可以考虑使用工厂方法模式抽象工厂模式来优化设计。

相关推荐
工程师0077 分钟前
C# 装箱、拆箱 底层原理
c#·装箱和拆箱
万粉变现经纪人39 分钟前
如何解决 pip install llama-cpp-python 报错 未安装 CMake/Ninja 或 CPU 不支持 AVX 问题
开发语言·python·开源·aigc·pip·ai写作·llama
清风明月一壶酒1 小时前
OpenClaw自动处理Word文档全流程
开发语言·c#·word
其实防守也摸鱼1 小时前
CTF密码学综合教学指南--第五章
开发语言·网络·笔记·python·安全·网络安全·密码学
小郑加油2 小时前
python学习Day12:pandas安装与实际运用
开发语言·python·学习
AC赳赳老秦2 小时前
投标合规提效:用 OpenClaw 实现标书 / 合同自动审核、关键词校验、格式优化,降低废标风险
开发语言·前端·python·eclipse·emacs·deepseek·openclaw
KuaCpp2 小时前
C++面向对象(速过复习版)
开发语言·c++
wbs_scy3 小时前
Linux线程同步与互斥(三):线程同步深度解析之POSIX 信号量与环形队列生产者消费者模型,从原理到源码彻底吃透
java·开发语言
2zcode3 小时前
基于MATLAB元胞自动机(CA)的AZ80A镁合金动态再结晶(DRX)过程模拟
开发语言·matlab·动态再结晶
iCxhust3 小时前
微机原理实践教程(C语言篇)---A001闪烁灯
c语言·开发语言·汇编·单片机·嵌入式硬件·51单片机·微机原理