使用 C# 编码(涉及类、接口、委托等关键知识点),实现对周黑鸭工厂的产品生产统一管理(windows程序设计课程作业一)

一、作业内容

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

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

二、基本思路

  1. 定义接口: 首先定义一个接口 IProductionFactory,里面包含两个方法,分别用于生产鸭脖和鸭翅。

  2. 实现工厂类: 创建三个工厂类 WuhanFactoryNanjingFactoryChangshaFactory,它们都实现了 IProductionFactory 接口,分别实现了生产鸭脖和鸭翅的方法。

  3. 定义委托: 定义一个委托类型 ProductionDelegate,用于引用工厂生产方法。

  4. 创建委托实例:Main 方法中,创建委托实例,并将工厂生产方法与委托关联起来。

  5. 调用委托: 使用委托调用各个工厂的生产方法,并输出结果。

 

三、代码实现   

1.定义一个接口IProductionFactory

//定义接口 IProductionFactory
public interface IProductionFactory//类中接口实现必须显示声明为public
{
    string ProduceDuckNeck();//生产鸭脖的方法
    string ProduceDuckWing();//生产鸭翅的方法
}

说明 :

  • 定义了一个生产工厂的接口,其中包含了两个方法:ProduceDuckNeck() 和 ProduceDuckWing(),分别表示生产鸭脖和鸭翅。

2.创建工厂类

(1)WuhanFactory

public class WuhanFactory: IProductionFactory
{
    public string ProduceDuckNeck() { return "武汉工厂能生产鸭脖"; }
    public string ProduceDuckWing() { return "武汉工厂能生产鸭翅"; }
}

(2)NanjingFactory

public class NanjingFactory : IProductionFactory
{
    public string ProduceDuckNeck() { return "南京工厂不能生产鸭脖"; }
    public string ProduceDuckWing() { return "南京工厂能生产鸭翅"; }
}

(3)ChangshaFactory

public class ChangshaFactory : IProductionFactory
{
    public string ProduceDuckNeck() { return "长沙工厂能生产鸭脖"; }
    public string ProduceDuckWing() { return "长沙工厂不能生产鸭翅"; }
}

说明:

  • 这些类都实现了 IProductionFactory 接口,分别代表了武汉工厂、南京工厂和长沙工厂。
  • 每个类中都实现了接口中定义的两个方法,分别返回了对应工厂能否生产鸭脖和鸭翅的信息。

3.定义委托

 public delegate string ProductionDelegate();

说明:

  • 定义了一个委托类型 ProductionDelegate,用于引用生产工厂的方法。
  • 通过委托的方式,可以将生产方法作为参数传递给委托,实现了工厂生产方法的动态调用。更灵活地组合和调用不同工厂的生产方法,同时提高了代码的可扩展性和可维护性。

4.Main方法

(1)创建了三个工厂类的实例:wuhanFactorynanjingFactorychangshaFactory 

IProductionFactory wuhanFactory = new WuhanFactory();
IProductionFactory nanjingFactory = new NanjingFactory();
IProductionFactory changshaFactory = new ChangshaFactory();

(2)通过委托类型的变量 ProductionDelegate 来声明六个委托实例:wuhanProduction1wuhanProduction2nanjingProduction1、nanjingProduction2changshaProduction1、changshaProduction2。这些委托实例用于引用工厂的生产方法。 接着将工厂的生产方法与相应的委托实例关联起来

 ProductionDelegate wuhanproduction1 = wuhanFactory.ProduceDuckNeck;
 ProductionDelegate wuhanproduction2 = wuhanFactory.ProduceDuckWing;
 ProductionDelegate nanjingproduction1 = nanjingFactory.ProduceDuckNeck;
 ProductionDelegate nanjingproduction2 = nanjingFactory.ProduceDuckWing;
 ProductionDelegate changshaproduction1 = changshaFactory.ProduceDuckNeck;
 ProductionDelegate changshaproduction2 = changshaFactory.ProduceDuckWing;

(3)通过调用委托实例来执行工厂的生产方法,并输出生产结果。 

Console.WriteLine("武汉工厂的产品生产情况:\n");
Console.WriteLine(wuhanproduction1() + ';' + wuhanproduction2() + '\n');
Console.WriteLine("南京工厂的产品生产情况:\n");
Console.WriteLine(nanjingproduction1() + ';' + nanjingproduction2() + '\n');
Console.WriteLine("长沙工厂的产品生产情况:\n");
Console.WriteLine(changshaproduction1() + ';' + changshaproduction2() + '\n');

 四、运行结果

 五、遇到的问题

1.委托的调用方式有误。

在委托类型的变量后面应该加上括号 `()` 来调用委托所引用的方法,而我刚开始没有加上这些括号,导致委托并没有被执行,输出了委托对象的信息而不是委托引用的方法的返回值。 

错误代码示例:Console.WriteLine(wuhanProduction1);

错误运行结果:

六、小结 

通过本次实验,我学习了接口、委托和工厂模式的基本用法。熟练掌握接口和委托的定义和基本用法。虽然过程中也遇到了输出结果不对的问题,但通过上网查询也顺利解决。通过本次实验,我也明白了委托可以存储对方法的引用,并在需要时动态调用这些方法。这种动态调用的能力使得代码更加灵活,可以根据运行时的条件来决定调用哪些方法,从而实现更加复杂的逻辑。

七、完整代码

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

namespace windows课程作业一
{
    //定义接口 IProductionFactory
    public interface IProductionFactory//类中接口实现必须显示声明为public
    {
        string ProduceDuckNeck();//生产鸭脖的方法
        string ProduceDuckWing();//生产鸭翅的方法
    }
    //定义生产委托
    public delegate string ProductionDelegate();
    public class WuhanFactory: IProductionFactory
    {
        public string ProduceDuckNeck() { return "武汉工厂能生产鸭脖"; }
        public string ProduceDuckWing() { return "武汉工厂能生产鸭翅"; }
    }
    public class NanjingFactory : IProductionFactory
    {
        public string ProduceDuckNeck() { return "南京工厂不能生产鸭脖"; }
        public string ProduceDuckWing() { return "南京工厂能生产鸭翅"; }
    }
    public class ChangshaFactory : IProductionFactory
    {
        public string ProduceDuckNeck() { return "长沙工厂能生产鸭脖"; }
        public string ProduceDuckWing() { return "长沙工厂不能生产鸭翅"; }
    }
    internal class Program
    {
        static void Main(string[] args)
        {
            IProductionFactory wuhanFactory = new WuhanFactory();
            IProductionFactory nanjingFactory = new NanjingFactory();
            IProductionFactory changshaFactory = new ChangshaFactory();
            ProductionDelegate wuhanproduction1 = wuhanFactory.ProduceDuckNeck;
            ProductionDelegate wuhanproduction2 = wuhanFactory.ProduceDuckWing;
            ProductionDelegate nanjingproduction1 = nanjingFactory.ProduceDuckNeck;
            ProductionDelegate nanjingproduction2 = nanjingFactory.ProduceDuckWing;
            ProductionDelegate changshaproduction1 = changshaFactory.ProduceDuckNeck;
            ProductionDelegate changshaproduction2 = changshaFactory.ProduceDuckWing;
            Console.WriteLine("武汉工厂的产品生产情况:\n");
            Console.WriteLine(wuhanproduction1() + ';' + wuhanproduction2() + '\n');
            Console.WriteLine("南京工厂的产品生产情况:\n");
            Console.WriteLine(nanjingproduction1() + ';' + nanjingproduction2() + '\n');
            Console.WriteLine("长沙工厂的产品生产情况:\n");
            Console.WriteLine(changshaproduction1() + ';' + changshaproduction2() + '\n');
        }
    }
}

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值