用c#编程,使用接口委托等实现对周黑鸭工厂的产品生产统一管理

一、周黑鸭工厂管理内容

        工厂生产主要包括鸭脖和鸭翅,共三个工厂。武汉工厂能同时生产鸭脖和鸭翅,南京工厂只能生产鸭翅,长沙工厂只能生产鸭脖。

二、代码要求

        需运用类、接口、委托等关键知识点。

三、主要思路

        1、定义接口IProductionFactory,其中包含了鸭脖和鸭翅的方法。

        2、定义三个工厂类WuhanFactory、NanjingFactory、ChangshaFactory分别实现接口IProductionFactory,用于具体的生产工厂。

        3、使用委托ProductionDelegate定义生产委托。

        4、在Main函数中,创建不同工厂实例,并通过生产委托进行生产。

四、代码难点

        1、接口方法的实现:每个工厂类都需要根据接口定义实现生产方法。对于只能生产特定产品的工厂,需要实现接口中所有方法,但对于不能生产的产品,可能需要在方法内部实现为空操作或抛出异常。

        2、委托的使用:需要理解委托的定义、创建、绑定

和调用过程。

        3、异常处理:如果工厂不支持生产某种产品,那么在调用生产方法时应该考虑如何处理这种情况。可以选择抛出异常、或者返回null等。

using System;
namespace ZhouHeiYa
{
    public interface IProductionFactory//定义接口
    {
        void ProduceDuckNeck();
        void ProduceDuckWing();
    }
    //定义武汉、南京、长沙三个生产工厂
    public class WuhanFactory : IProductionFactory
    {
        public void ProduceDuckNeck()
        {
            Console.WriteLine("武汉工厂生产鸭脖");
        }

        public void ProduceDuckWing()
        {
            Console.WriteLine("武汉工厂生产鸭翅");
        }
    }

    public class NanjingFactory : IProductionFactory
    {
        public void ProduceDuckNeck()
        {
            throw new NotSupportedException("南京工厂不能生产鸭脖");
        }

        public void ProduceDuckWing()
        {
            Console.WriteLine("南京工厂生产鸭翅");
        }
    }

    public class ChangshaFactory : IProductionFactory
    {
        public void ProduceDuckNeck()
        {
            Console.WriteLine("长沙工厂生产鸭脖");
            Console.ReadLine();
        }

        public void ProduceDuckWing()
        {
            throw new NotSupportedException("长沙工厂不能生产鸭翅");
        }
    }

    public delegate void ProductionDelegate(IProductionFactory factory);//定义生产委托

    internal class Program
    {
        static void Main(string[] args)
        {
            // 创建不同工厂实例  
            IProductionFactory wuhanFactory = new WuhanFactory();
            IProductionFactory nanjingFactory = new NanjingFactory();
            IProductionFactory changshaFactory = new ChangshaFactory();

            // 创建生产委托  
            ProductionDelegate duckneck = ProduceDuckNeck;
            ProductionDelegate duckwing = ProduceDuckWing;

            // 使用委托调用工厂生产鸭脖和鸭翅  
            duckneck(wuhanFactory);
            duckwing(wuhanFactory);
            duckwing(nanjingFactory);            
            duckneck(changshaFactory);
            // 尝试使用委托调用南京工厂生产鸭脖,并处理异常  
            try
            {
                duckneck(nanjingFactory);
            }
            catch (NotSupportedException ex)
            {
                Console.WriteLine(ex.Message);
            }

            // 尝试使用委托调用长沙工厂生产鸭翅,并处理异常  
            try
            {
                duckwing(changshaFactory);
            }
            catch (NotSupportedException ex)
            {
                Console.WriteLine(ex.Message);
            }
 
        }

        // 生产鸭脖的委托方法  
        static void ProduceDuckNeck(IProductionFactory factory)
        {
            factory.ProduceDuckNeck();
        }

        // 生产鸭翅的委托方法  
        static void ProduceDuckWing(IProductionFactory factory)
        {
            factory.ProduceDuckWing();
        } 
        
    }
    
}

五、代码讲解

        委托的使用:

        代码定义了一个名为ProductionDelegate的委托,它接受一个IProductionFactory类型的参数,并且没有返回值。

        通过创建两个委托实例duckneckduckwing,并分别将它们指向ProduceDuckNeckProduceDuckWing方法,可以实现对工厂方法的间接调用。

        异常处理:

        当尝试让不支持生产某种产品的工厂生产该产品时(例如,让NanjingFactory生产鸭脖或让ChangshaFactory生产鸭翅),工厂会抛出NotSupportedException异常。
代码通过使用try-catch块来捕获这些异常,并打印出异常信息,从而处理这些异常情况。

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值