周黑鸭工厂的产品生产管理

本文介绍了如何使用C#通过定义接口、类和委托,实现在周黑鸭工厂中根据不同工厂的能力进行鸭脖和鸭翅的生产管理。文章详细展示了如何定义接口、工厂类的实现以及使用委托进行灵活的生产操作,还扩展了工厂选择功能和异常处理机制。
摘要由CSDN通过智能技术生成

一、内容概览:

      使用 C# 编码(涉及类、接口、委托等关键知识点),实现对周黑鸭工厂的产品生产统一管理,主要产品包括鸭脖和鸭翅。武汉工厂能生生产鸭脖和鸭翅,南京工厂只能生产鸭翅,长沙工厂只能生产鸭脖。

二、具体要求:

  1. 定义接口 IProductionFactory,包含生产鸭脖和鸭翅的方法。
  2. 定义类 WuhanFactory、NanjingFactory、ChangshaFactory 分别实现接口 IProductionFactory,用于具体的生产工厂。
  3. 使用委托 ProductionDelegate 定义生产委托。
  4. 在 Main 函数中,创建不同工厂的实例,并通过生产委托进行生产。

三、具体实现:

第一步:定义接口 IProductionFactory

使用interface来定义接口

 public interface IProductionFactory
    {
        void ProduceDuckNeck();//定义鸭脖接口
        void ProduceDuckWing();//定义鸭翅接口
    }

 

第二步:定义工厂类(WuhanFactory,NanjingFactory,ChangshaFactory)

根据题目要求,不同的工厂有不同的生产能力,因此实现时需要根据具体功能进行方法的实现或者留空。

public class WuhanFactory : IProductionFactory  //定义武汉工厂类
    {
        public void ProduceDuckNeck()
        {
            Console.WriteLine("Wuhan Factory produced 鸭脖.");
        }

        public void ProduceDuckWing()
        {
            Console.WriteLine("Wuhan Factory produced 鸭翅.");
        }
    }

    public class NanjingFactory : IProductionFactory     //定义南京工厂类
    {
        public void ProduceDuckNeck()
        {
            Console.WriteLine("Nanjing Factory cannot produce 鸭脖."); 

        }                   // 南京不能生产鸭脖

        public void ProduceDuckWing()
        {
            Console.WriteLine("Nanjing Factory produced 鸭翅.");
        }
    }

    public class ChangshaFactory : IProductionFactory           //定义长沙工厂类
    {
        public void ProduceDuckNeck()
        {
            Console.WriteLine("Changsha Factory produced 鸭脖.");
        }

        public void ProduceDuckWing()
        {
            Console.WriteLine("Changsha Factory cannot produce 鸭翅.");
        }                       //长沙不能生产鸭翅
    }

      在第二步中,分别定义了武汉,南京,长沙类,同时通过冒号语法,将三个类都继承于接口IProductionFactory。

第三步:定义生产委托ProductionDelegate

  定义委托可以允许我们更灵活地引用和执行方法。若在生产场景中使用委托,可以定义一个特定签名的委托,用来代表各种生产行为。 通过委托,可以在不直接调用方法的情况下引用方法,这为程序设计提供了更大的灵活性和解耦能力。

public delegate void ProductionDelegate();

第四步:使用 Main 函数进行测试

在主函数中,我们将创建不同工厂的实例,然后利用委托指向对应的生产方法,模拟生产流程。

class Program
{
    static void Main(string[] args)
    {
        // 实例化工厂
        WuhanFactory wuhanFactory = new WuhanFactory();
        NanjingFactory nanjingFactory = new NanjingFactory();
        ChangshaFactory changshaFactory = new ChangshaFactory();

        // 利用委托进行生产(将方法绑定到委托实例)
        ProductionDelegate wuhanProductionNeck = new ProductionDelegate(wuhanFactory.ProduceDuckNeck);
        ProductionDelegate wuhanProductionWing = new ProductionDelegate(wuhanFactory.ProduceDuckWing);

        ProductionDelegate nanjingProductionWing = new ProductionDelegate(nanjingFactory.ProduceDuckWing);

        ProductionDelegate changshaProductionNeck = new ProductionDelegate(changshaFactory.ProduceDuckNeck);

        // 执行生产(使用委托实例来调用方法)
        Console.WriteLine("Wuhan Factory Production:");
        wuhanProductionNeck();
        wuhanProductionWing();

        Console.WriteLine("\nNanjing Factory Production:");
        nanjingProductionWing();

        Console.WriteLine("\nChangsha Factory Production:");
        changshaProductionNeck();
    }
}

在第四步的代码中,我们的具体实现步骤可以总结为以下三步:

  1. 实例化工厂对象。
  2. 将方法绑定到委托实例。
  3. 使用委托实例来调用方法。

实际运行结果如下:

四、功能扩展 

第五步:增加工厂选择功能

         在实际应用中,因为不同工厂的生产产品具有重叠性,用户与工厂之间的距离需求等,可能需要根据用户输入或某种条件动态选择工厂进行生产。这可以通过工厂模式(Factory Pattern)来实现更灵活的工厂选择。

public class FactorySelector
{
    public static IProductionFactory GetFactory(string location)
    {
        switch(location)
        {
            case "Wuhan":
                return new WuhanFactory();
            case "Nanjing":
                return new NanjingFactory();
            case "Changsha":
                return new ChangshaFactory();
            default:
                throw new ArgumentException("输入错误.");
        }
    }
}

 在 Main 函数中利用此选择功能:

static void Main(string[] args)
{
    //选择工厂位置
    string factoryLocation = "Wuhan"; // 这里我直接选的“Wuhan”,实际上应该通过输入或是其他方式
    IProductionFactory selectedFactory = FactorySelector.GetFactory(factoryLocation);

    // 直接调用方法(未使用委托)
    selectedFactory.ProduceDuckNeck();
    selectedFactory.ProduceDuckWing();
}

 运行结果如下:

 第六步:定义异常类

在真实的系统中,生产过程可能会遇到各种异常情况(如原料不足、机器故障等)。因此,在编写生产逻辑时,加入异常处理机制是非常必要的,以保证系统可靠性和健壮性。

 

public class MainClass
{
    public static void Main(string[] args)
    {
        try
        {
            // 实例化工厂对象
            var wuhanFactory = new WuhanFactory();
            var nanjingFactory = new NanjingFactory();
            var changshaFactory = new ChangshaFactory();

            // 将方法绑定到委托实例
            ProductionDelegate wuhanProductionNeck = new ProductionDelegate(wuhanFactory.ProduceNeck);
            ProductionDelegate wuhanProductionWing = new ProductionDelegate(wuhanFactory.ProduceWing);
            ProductionDelegate nanjingProductionWing = new ProductionDelegate(nanjingFactory.ProduceWing);
            ProductionDelegate changshaProductionNeck = new ProductionDelegate(changshaFactory.ProduceNeck);

            // 执行生产操作
            Console.WriteLine("Wuhan Factory Production:");
            wuhanProductionNeck();
            wuhanProductionWing();

            Console.WriteLine("\nNanjing Factory Production:");
            nanjingProductionWing();

            Console.WriteLine("\nChangsha Factory Production:");
            changshaProductionNeck();
        }
        catch (InsufficientMaterialsException e)
        {
            // 处理原料不足的异常
            Console.WriteLine($"生产中断: {e.Message}");
        }
        catch (MachineFailureException e)
        {
            // 处理机器故障的异常
            Console.WriteLine($"生产中断: {e.Message}");
        }
        catch (Exception e)
        {
            // 处理其它未预料到的异常
            Console.WriteLine($"发生未知错误: {e.Message}");
        }
        finally
        {
            // 总是执行的清理代码
            Console.WriteLine("生产尝试完成,进行清理和资源释放。");
        }
    }
}

public class InsufficientMaterialsException : Exception    //异常类1
{
    public InsufficientMaterialsException(string message) : base(message) {}
}

public class MachineFailureException : Exception    //异常类2
{
    public MachineFailureException(string message) : base(message) {}
}

   以上的代码中try中内容与测试一致。在生产流程中加入异常处理机制时,使用 try-catch 语句来捕获和处理可能发生的异常。创建了两个自定义异常类:InsufficientMaterialsException 和 MachineFailureException。当生产过程中出现原料不足或机器故障时,可以抛出自定义的异常,从而让异常处理更加具体和有针对性。这样做有助于确保程序在遇到错误时不会意外崩溃,允许记录错误信息或采取其他应对措施。

运行结果如下:

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值