Windows第一次作业:实现对周黑鸭工厂的产品生产统一管理

本文介绍了如何使用C#实现周黑鸭工厂的统一产品生产管理,涉及接口IProductionFactory、类工厂设计、委托ProductionDelegate的运用,以及如何处理工厂间的生产限制。作者通过实例展示了接口和委托在实际问题中的应用和学习心得。
摘要由CSDN通过智能技术生成

前言

为什么会写这篇文章呢?第一肯定是为了完成老师布置的作业,第二是为了提高自己写博客的能力,最后希望这篇文章对正在学习c#的您有帮助

一、作业题目

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

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

二、问题分析

根据题干,我们知道需要使用接口,委托等方法。这两个方法的使用也正是本题的难点所在。

所以我们要分析一下我们怎么解决这两个难题。

  1. 接口设计与实现
    • 定义接口IProductionFactory时需要准确抽象出鸭脖和鸭翅生产的公共行为,确保接口的方法能够适用于所有实现该接口的类。
    • 在实现接口的各个工厂类中,需要处理工厂不能生产某种产品的情况。在这个例子中,南京工厂不能生产鸭脖,长沙工厂不能生产鸭翅,这就需要通过某种方式来反映这种限制。在提供的代码中,这是通过抛出NotImplementedException来实现的,但这可能不是最佳的用户体验,因为异常处理通常用于异常情况,而这种情况在设计上是已知的。
  2. 委托的使用
    • 委托ProductionDelegate的设计需要考虑到它能够接受一个工厂对象,并调用其生产方法。委托的定义和使用需要理解委托类型与所引用方法的签名必须匹配。
    • 在使用委托调用生产方法时,需要处理可能出现的异常情况,特别是当某些工厂不支持生产某种产品时。

三、解决问题的基础

1、接口的使用方法

c# 接口使用_c#调用接口-CSDN博客

在本题中,接口的作用是:接口允许一个类实现多个接口,这样可以在同一个类中实现不同接口的方法。这使得对象可以根据调用时的上下文执行不同的操作,提高了代码的灵活性和可复用性。只是很简单的使用接口,代码如下:

    // 定义生产接口  
        public interface IProductionFactory
        {
            void ProduceDuckNeck(); // 生产鸭脖的方法
            void ProduceDuckWing(); // 生产鸭翅的方法
        }

2、委托的使用方法

C#-委托的详细用法_c# 委托用法-CSDN博客

委托是一种类型,它封装了方法的签名和定义,可以被当做参数来传递或赋值给变量。

本题委托定义的代码:

 public delegate void ProductionDelegate();

四、具体代码的实现

在知道了本题所需要的基础后,我们来看看本题的具体代码是什么吧

1、类的定义

       // 武汉工厂类,实现IProductionFactory接口  
        public class WuhanFactory : IProductionFactory
        {
            public void ProduceDuckNeck()
            {
                Console.WriteLine("武汉工厂生产了鸭脖");
            }

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

        // 南京工厂类,实现IProductionFactory接口  
        public class NanjingFactory : IProductionFactory
        {
            public void ProduceDuckNeck()
            {
                throw new NotImplementedException("南京工厂不能生产鸭脖");
            }

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

        // 长沙工厂类,实现IProductionFactory接口  
        public class ChangshaFactory : IProductionFactory
        {
            public void ProduceDuckNeck()
            {
                Console.WriteLine("长沙工厂生产了鸭脖");
            }

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

分别定义武汉、长沙、南京这三个类,并且实现他们所对应的接口里面的方法,对其是否能生产鸭脖和鸭翅进行定义

2、主函数的实现

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

                // 使用生产委托进行生产  
                ProductionDelegate DuckNeck = wuhanFactory.ProduceDuckNeck; //创建一个委托实例,并指向ProduceDuckNeck方法
                DuckNeck += changshaFactory.ProduceDuckNeck;
                DuckNeck.Invoke();  //Invoke()方法是委托对象的一个成员,用于调用该委托所引用的方法。
                

                ProductionDelegate DuckWing = wuhanFactory.ProduceDuckWing;
                DuckWing += nanjingFactory.ProduceDuckWing;
                DuckWing.Invoke();
                
                
                Console.ReadLine();
               
          }

在主函数中,我们创建了不同工厂的实例,使用了委托进行生产,并且使用了委托里面的函数Invoke()。

五、学习心得

在解决上述关于“周黑鸭工厂”的问题时,我获得了不少的学习体验和心得。

首先,我深刻体会到了面向对象编程的核心理念。通过定义接口IProductionFactory,我们为不同类型的工厂设定了一个通用的行为标准。这使我明白了抽象的重要性,它允许我们统一地看待和处理具有相似行为或属性的对象。

其次,通过实现该接口的WuhanFactoryNanjingFactoryChangshaFactory类,我学习到了如何根据实际需求定制类的行为。特别是在南京和长沙工厂中,我们通过抛出NotSupportedException异常来处理不支持的生产行为,这是一种非常实用的错误处理机制。

再者,通过使用委托ProductionDelegate,我进一步理解了委托在C#中的用法和重要性。委托允许我们将方法作为参数传递或赋值给变量,这提供了极大的灵活性,使得我们可以在运行时动态地决定要执行哪个方法。

最后,在Main函数中整合所有这些元素并进行测试,我体验到了从设计到实现的完整过程。这不仅仅是编码,更多的是逻辑思维和问题解决的能力。

总的来说,这次学习让我更加熟悉了C#的面向对象编程特性,包括接口、类和委托的使用。同时,我也意识到了在实际开发中,合理地使用这些特性可以使代码更加清晰、灵活和可维护。

六、完整代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace zuoye1
{
    internal class Program
    {
        // 定义生产接口  
        public interface IProductionFactory
        {
            void ProduceDuckNeck();
            void ProduceDuckWing();
        }

        // 武汉工厂类,实现IProductionFactory接口  
        public class WuhanFactory : IProductionFactory
        {
            public void ProduceDuckNeck()
            {
                Console.WriteLine("武汉工厂生产了鸭脖");
            }

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

        // 南京工厂类,实现IProductionFactory接口  
        public class NanjingFactory : IProductionFactory
        {
            public void ProduceDuckNeck()
            {
                throw new NotImplementedException("南京工厂不能生产鸭脖");
            }

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

        // 长沙工厂类,实现IProductionFactory接口  
        public class ChangshaFactory : IProductionFactory
        {
            public void ProduceDuckNeck()
            {
                Console.WriteLine("长沙工厂生产了鸭脖");
            }

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

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

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

                // 使用生产委托进行生产  
                ProductionDelegate DuckNeck = wuhanFactory.ProduceDuckNeck; //创建一个委托实例,并指向ProduceDuckNeck方法
                DuckNeck += changshaFactory.ProduceDuckNeck;
                DuckNeck.Invoke();  //Invoke()方法是委托对象的一个成员,用于调用该委托所引用的方法。
                

                ProductionDelegate DuckWing = wuhanFactory.ProduceDuckWing;
                DuckWing += nanjingFactory.ProduceDuckWing;
                DuckWing.Invoke();
                
                
                Console.ReadLine();
               
        }
    }
    }

运行结果

​​​​​​​

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值