C#实践作业1(类、接口、委托)

题目:

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

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

解析:

     

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

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

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

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

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

代码:

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

}

​

相关推荐

  1. C#实践作业1接口委托

    2024-04-08 10:52:03       12 阅读
  2. C++ IDisposable 接口抽象实现

    2024-04-08 10:52:03       20 阅读
  3. C# 委托

    2024-04-08 10:52:03       37 阅读
  4. C#-委托

    2024-04-08 10:52:03       38 阅读
  5. C# 抽象接口

    2024-04-08 10:52:03       15 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-08 10:52:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-08 10:52:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-08 10:52:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-08 10:52:03       20 阅读

热门阅读

  1. 动态规划算法 - LC354. 俄罗斯套娃信封问题

    2024-04-08 10:52:03       12 阅读
  2. Linux常用命令

    2024-04-08 10:52:03       12 阅读
  3. Scrapy数据存储到数据库

    2024-04-08 10:52:03       12 阅读
  4. 人到中年,IT从业者怎么办

    2024-04-08 10:52:03       12 阅读
  5. 猜测生日日期

    2024-04-08 10:52:03       15 阅读
  6. 正则表达式

    2024-04-08 10:52:03       12 阅读
  7. 基于Docker 快速搭建EFK日志中心

    2024-04-08 10:52:03       9 阅读
  8. 利用python抓取小说,爬虫抓取小说

    2024-04-08 10:52:03       12 阅读
  9. 关于APP分发,要取得更好效果需要注意的

    2024-04-08 10:52:03       12 阅读
  10. 深入浅出 -- 系统架构之负载均衡Nginx跨域配置

    2024-04-08 10:52:03       12 阅读
  11. 前后端接口写法(传输数据)

    2024-04-08 10:52:03       12 阅读
  12. Teamcenter 修改缓存文件夹名称及路径的方法

    2024-04-08 10:52:03       23 阅读
  13. css 手写返回箭头

    2024-04-08 10:52:03       11 阅读
  14. 【告警监控】监控,巡检和拨测

    2024-04-08 10:52:03       13 阅读