Windows课程设计1:C#实现对周黑鸭工厂的产品生产统一管理

一、题目内容:

使用C#编码,实现对周黑鸭工厂的产品生产统一管理,其中,主要产品包括鸭脖和鸭翅。有三家周黑鸭生产工厂,武汉工厂能生产鸭脖和鸭翅,南京工厂只能生产鸭翅,长沙工厂只能生产鸭脖。

二、具体要求如下:

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

三、解题思路:

在做每一个编程题时,咱们不要害怕问题太难太长,其实我们都可以按照这种先分析思路,将每一个关键实现的部分一步步实现,即把一个大问题分成几个简单的小问题去分别解决,从而最终解决这个大问题的模式去解决问题。这样也是可以锻炼我们的思维逻辑,从而更加领会题目用意。 

1、定义一个工厂生产周黑鸭产品的接口,其中包含生产鸭脖和鸭翅的方法:

为了照顾到还不太了解接口概念的同志们,我在这里先解释一下接口的概念。

接口是指定一组函数成员而不实现它们的引用类型。接口使用interface关键字进行定义,可由方法、属性、事件、索引器或这四种成员类型的任意组合构成。接口类似于抽象基类,不能直接实例化接口。接口的作用在于定义了方法,但自己不去实现,而是通过将接口继承给不同的类,由具体的类去“定制”自己需要的实现方法。

所以,在本程序中,我们需要根据题目要求定义一个工厂生产周黑鸭产品的接口,此接口主要由三个工厂类去继承,并根据题目要求的权限去实现接口中对于生产鸭脖和鸭翅的方法,这样就不必对每个工厂类均作具体编码(每个功能的具体实现),可以有效地节省内存,减少代码冗余,提高代码复用率。

 定义一个工厂生产周黑鸭产品的接口代码如下:

 interface IProductionFactoty    //定义接口IProductionFactory,包含生产鸭脖和鸭翅的方法
 {
     void ProduceDuck_necks();  //定义生产鸭脖的方法
     void ProduceDuck_wings();  //定义生产鸭翅的方法
 }
2、分别定义类WuhanFactory、NanjingFactory、ChangshaFactory实现接口IProductionFactory定义的方法,完成具体的生产要求:

其中,如题目要求,要求武汉周黑鸭生产工厂既可以生产鸭脖,也可以生产鸭翅,则应该在武汉工厂类中具体实现接口中对于生产鸭脖和鸭翅的方法;要求南京周黑鸭工厂只能生产鸭翅,而不能生产鸭脖,则应该在南京工厂类中具体实现接口中对于生产鸭翅的方法;要求长沙工厂类只能生产鸭脖,而不能生产鸭翅,则应该在长沙工厂类中具体实现接口中对于生产鸭脖的方法。通过定义武汉工厂、南京工厂和长沙工厂这三个工厂类,让这三个工厂类分别去继承上述定义的工厂生产周黑鸭产品的接口,分别按照自己的权限(即能够生产哪些产品)去具体实现接口中生产周黑鸭产品鸭脖和鸭翅的方法,这样的操作方式使得代码精简且清晰明了,大大提高代码的复用。

     (1) 定义类WuhanFactory

          其中武汉周黑鸭工厂类既可以生产周黑鸭产品的鸭脖,也可以生产鸭翅; 

//定义类WuhanFactory(武汉工厂)实现接口IProductionFactory生产鸭脖和鸭翅  
 
class WuhanFactory: IProductionFactoty 
   {
       public void ProduceDuck_necks()   //定义武汉工厂实现生产鸭脖的方法
       {
           Console.WriteLine("这里是武汉工厂,正在生产鸭脖!");
       }
       public void ProduceDuck_wings()  //定义武汉工厂实现生产鸭翅的方法
       { 
           Console.WriteLine("这里是武汉工厂,正在生产鸭翅!");
       }
   }
     (2) 定义类NanjingFactory

          其中,南京周黑鸭工厂类只能生产周黑鸭产品中的鸭翅,不能生产鸭脖; 

 //定义类NanjingFactory(南京工厂)实现接口IProductionFactoty生产鸭翅
 
 class NanjingFactory: IProductionFactoty  
   {
       public void ProduceDuck_necks()  //定义南京工厂实现生产鸭脖的方法(南京工厂无法生产鸭脖)
       {
           Console.WriteLine("抱歉,南京工厂无法生产鸭脖!");
       }
       public void ProduceDuck_wings() //定义南京工厂实现生产鸭翅的方法
       {

           Console.WriteLine("这里是南京工厂,正在生产鸭翅!");
       }
   }
      (3) 定义类ChangshaFactory 

           其中,长沙周黑鸭工厂类只能生产周黑鸭产品中的鸭脖,不能生产鸭翅; 

 //定义类ChangshaFactory(长沙工厂)实现接口IProductionFactoty生产鸭脖

 class ChangshaFactory: IProductionFactoty  
 {
     public void ProduceDuck_necks()  //定义长沙工厂实现生产鸭脖的方法
     {
         Console.WriteLine("这里是长沙工厂,正在生产鸭脖!");
     }
     public void ProduceDuck_wings() //定义长沙工厂实现生产鸭翅的方法(长沙工厂无法生产鸭翅)
     {
         Console.WriteLine("抱歉,长沙工厂无法生产鸭翅!");
     }
 }
3、定义生产委托:ProductionDelegate

关于委托,为了照顾没学过委托的小伙伴们,我在这里给出委托的概念,其实,委托在C#中就是一种引用类型,本质就是一个类,委托可以说持有一个或多个方法,当委托被调用时,它所持有的方法也会被调用。委托是方法的抽象,它存储的就是一系列具有相同参数、相同名字而不同实现的方法的地址,此处可以借鉴C里的指针。

说完了委托的定义,我们再来看,在这里我们来定义一个生产委托,由委托来调用参数相同而实现不同的方法,例如,当我们想要武汉工厂生产鸭脖和鸭翅时,我们就只需要创建一个生产委托的实例,将武汉工厂类中的实现生产周黑鸭产品中的鸭脖和鸭翅的方法名赋值给该生产委托实例,然后以函数调用的形式,去调用武汉工厂类中的两个方法实现武汉工厂生产鸭脖和鸭翅。

好了,到此大家应该明白了委托的机制,作用和好处了。

定义一个生产委托的代码如下: 

public delegate void ProductionDelegate(); //定义生产委托ProductionDelegate
4、在Main函数中,创建不同工厂的实例,并通过生产委托进行生产

在此,我们需要分别去创建三个工厂类的实例,其中在这里我们使用new去创建实例并赋值给生产工厂接口,则生成了三个接口实例myWuhanFactory、myNanjingFactory

、myChangshaFactory,接下来根据定义好的生产委托,我们需要创建一个生产委托实例productionDelegate,然后按照前面的思路,将每个接口实例所需调用的生产方法赋值给生产委托实例,让该生产委托实例以函数调用的形式去调用相应的函数,从而实现三个工厂分别生产相应的周黑鸭工厂产品。

注意,在具体代码中,我们给生产委托赋值时,用到了“+=”这个符号,可以这么理解,相当于我们把生产委托实例当做是一个数组,此数组中存放了相应工厂实例应该调用的所有方法,比如,对于武汉工厂实例,我们就需要通过这样一种生产委托实例数组去存储所有武汉工厂的方法,从而实现所有方法的调用。

Main函数中的代码如下: 

 static void Main(string[] args)
 {
     IProductionFactoty myWuhanFactory = new WuhanFactory(); //创建武汉工厂实例
     IProductionFactoty myNanjingFactory = new NanjingFactory(); //创建南京工厂实例
     IProductionFactoty myChangshaFactory = new ChangshaFactory(); //创建长沙工厂实例
     ProductionDelegate productionDelegate;     //创建生产委托(ProductionDelegate)的实例
     productionDelegate=myWuhanFactory.ProduceDuck_necks; //用生产委托实例调用武汉工厂的生产鸭脖的方法
     productionDelegate += myWuhanFactory.ProduceDuck_wings; //用生产委托实例调用武汉工厂的生产鸭翅的方法
     productionDelegate(); //相当于函数调用
     productionDelegate=myNanjingFactory.ProduceDuck_wings; //用生产委托实例调用南京工厂的生产鸭翅的方法
     productionDelegate();
     productionDelegate=myChangshaFactory.ProduceDuck_necks; //用生产委托实例调用南京工厂的生产鸭脖的方法
     productionDelegate();
 }

四、完整代码:

//Windows课程设计1:使用C#完成周黑鸭工厂生产产品的统一管理(涉及类、接口、委托等知识点)
using System;
namespace Windows_CourseDesign1
{
    interface IProductionFactoty    //定义接口IProductionFactory,包含生产鸭脖和鸭翅的方法
    {
        void ProduceDuck_necks();  //定义生产鸭脖的方法
        void ProduceDuck_wings();  //定义生产鸭翅的方法
    }
  
    class WuhanFactory: IProductionFactoty  //定义类WuhanFactory(武汉工厂)实现接口IProductionFactory生产鸭脖和鸭翅
    {
        public void ProduceDuck_necks()   //定义武汉工厂实现生产鸭脖的方法
        {
            Console.WriteLine("这里是武汉工厂,正在生产鸭脖!");
        }
        public void ProduceDuck_wings()  //定义武汉工厂实现生产鸭翅的方法
        { 
            Console.WriteLine("这里是武汉工厂,正在生产鸭翅!");
        }
    }
    class NanjingFactory: IProductionFactoty  //定义类NanjingFactory(南京工厂)实现接口IProductionFactoty生产鸭翅
    {
        public void ProduceDuck_necks()  //定义南京工厂实现生产鸭脖的方法(南京工厂无法生产鸭脖)
        {
            Console.WriteLine("抱歉,南京工厂无法生产鸭脖!");
        }
        public void ProduceDuck_wings() //定义南京工厂实现生产鸭翅的方法
        {

            Console.WriteLine("这里是南京工厂,正在生产鸭翅!");
        }
    }
    class ChangshaFactory: IProductionFactoty   //定义类ChangshaFactory(长沙工厂)实现接口IProductionFactoty生产鸭脖
    {
        public void ProduceDuck_necks()  //定义长沙工厂实现生产鸭脖的方法
        {
            Console.WriteLine("这里是长沙工厂,正在生产鸭脖!");
        }
        public void ProduceDuck_wings() //定义长沙工厂实现生产鸭翅的方法(长沙工厂无法生产鸭翅)
        {
            Console.WriteLine("抱歉,长沙工厂无法生产鸭翅!");
        }
    }

    public delegate void ProductionDelegate(); //定义生产委托ProductionDelegate
    internal class Program
    {
        static void Main(string[] args)
        {
            IProductionFactoty myWuhanFactory = new WuhanFactory(); //创建武汉工厂实例
            IProductionFactoty myNanjingFactory = new NanjingFactory(); //创建南京工厂实例
            IProductionFactoty myChangshaFactory = new ChangshaFactory(); //创建长沙工厂实例
            ProductionDelegate productionDelegate;     //创建生产委托(ProductionDelegate)的实例
            productionDelegate=myWuhanFactory.ProduceDuck_necks; //用生产委托实例调用武汉工厂的生产鸭脖的方法
            productionDelegate += myWuhanFactory.ProduceDuck_wings; //用生产委托实例调用武汉工厂的生产鸭翅的方法
            productionDelegate(); //相当于函数调用
            productionDelegate=myNanjingFactory.ProduceDuck_wings; //用生产委托实例调用南京工厂的生产鸭翅的方法
            productionDelegate();
            productionDelegate=myChangshaFactory.ProduceDuck_necks; //用生产委托实例调用南京工厂的生产鸭脖的方法
            productionDelegate();
        }
    }
}

五、总结:

在这个C# Windows课程设计中,题目要求使用类、接口、委托等实现对周黑鸭工厂生产的统一管理,其中利用接口,不同的类就可以通过继承接口从而实现接口的方法完成不同的生产要求,从而达到代码的重用和灵活性。而通过生产委托,我们可以利用其实质(调用同参不同实现的函数)方便地实现武汉、南京和长沙这三个工厂类对于周黑鸭生产的不同的产品进行不同的具体实现。

另外,通过本次C# Windows课程设计的练习,我们也更加领会到接口和委托在我们现实生活中的广泛应用之处,也熟练地掌握了委托的实际场景的具体实现。对于不懂接口、委托等相关知识点的定义的小伙伴们可以先去了解这些知识的相关概念,大致对此有一定的认识再去读本篇文章相信会有更好的阅读效果哦,总之,对于像接口、委托等这种难以通过文字层面上的意思理解的知识点,就需要大家多动手操练代码,从实践和结果中直观地理解和应用到实际生活中。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值