C#实践作业1(类、接口、委托)实现对周黑鸭工厂的产品生产统一管理

一、题目

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

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

二、知识点

(ps:具体知识点的学习可以看我的其他博客,应该写了)

2.1接口(Interface)

C#中的接口是一种定义了一组方法的契约或规范,但不提供这些方法的具体实现。此题中接口的作用是为类定义了一个应该遵循的规范或契约。任何实现该接口的类都必须提供接口中定义的所有方法的实现。这有助于确保类之间的一致性,并使得代码更加可预测和可维护。

2.2委托(Delegate)

C# 中的委托是一种类型,它安全地封装了方法的签名和方法的引用。委托特别用于实现回调和事件驱动编程模型。可以直接理解为委托就是定义一件事情任务,比如本题就是“做生产”这件事情。

2.3类

本题就是把做委托这件事的(即被委托人乙方)东西作为类

三、具体步骤

3.1接口定义IProductionFactory接口定义了工厂可能会执行的两个方法:ProduceDuckNeckProduceDuckWing

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

3.2工厂实现:每个工厂类(WuhanFactoryNanjingFactoryChangshaFactory)都实现了IProductionFactory接口,并根据具体的生产方法的不同调用不同的接口方法。例如,WuhanFactory可以生产鸭脖和鸭翅,而NanjingFactory只能生产鸭翅。

//定义武汉、南京、长沙三个生产工厂
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("长沙工厂不能生产鸭翅");
    }
}

3.3委托定义ProductionDelegate委托类型用于将工厂对象作为参数,并调用其生产方法。这样,委托可以作为生产方法的引用,从而在不同的工厂上执行相同的操作。

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

委托具体做什么:

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

3.4异常处理:而对于不做某些接口方法的工厂类(例如南京工厂不支持生产鸭脖),则对应的方法会抛出NotSupportedException。在调用这些方法时,代码通过try-catch块捕获并处理这些异常。(本题没有这个要求,这是拓展)

抛出例子:

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

try-catch:

try
{
    duckneck(nanjingFactory);
}
catch (NotSupportedException ex)
{
    Console.WriteLine(ex.Message);
}
try
{
    duckwing(changshaFactory);
}
catch (NotSupportedException ex)
{
    Console.WriteLine(ex.Message);
}

3.5委托调用:在Main方法中,委托被用来调用工厂的生产方法。将委托指向不同的工厂对象,而无需修改调用代码,就可以在不同的工厂中选择生产鸭脖或者鸭翅。

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

 // 使用委托调用工厂生产鸭脖和鸭翅  
 duckneck(wuhanFactory);
 duckwing(wuhanFactory);
 duckwing(nanjingFactory);
 duckneck(changshaFactory);

四、完整代码

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();
        }
    }
    
}

五、结果

  • 10
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值