目录
一、作业内容
使用 C# 编码(涉及类、接口、委托等关键知识点),实现对周黑鸭工厂的产品生产统一管理,主要产品包括鸭脖和鸭翅。武汉工厂能生生产鸭脖和鸭翅,南京工厂只能生产鸭翅,长沙工厂只能生产鸭脖。具体要求如下:
- 定义接口 IProductionFactory,包含生产鸭脖和鸭翅的方法。
- 定义类 WuhanFactory、NanjingFactory、ChangshaFactory 分别实现接口 IProductionFactory,用于具体的生产工厂。
- 使用委托 ProductionDelegate 定义生产委托。
- 在 Main 函数中,创建不同工厂的实例,并通过生产委托进行生产。
二、解题
要对周黑鸭工厂进行统一管理,吃过周黑鸭的伙伴们都知道,周黑鸭卖鸭脖、鸭翅、鸭锁骨等鸭货;此题中,提到了两个重要的产品:鸭脖,鸭翅;而某些工厂只能生产鸭脖,某些工厂只能生产鸭翅,某些工厂两者都能生产。(我们不禁就会想起收作业的例子,老师能收,学生能收,但是只有老师收和学生中的学习委员才能收作业),所以我们自然想到,可以把生产鸭脖活和生产鸭翅活,变成一个生产这一个动作,对应每个工厂就是生产鸭脖和鸭翅的方法,这就得到我们第一个重难点:接口。
同时,几个工厂,我们也就可以自然想到,将这几个共产变成对象(类),实现接口。这就是第二个重难点:类。
我们将生产的活“委托”到各个工厂,就得到了我们第三个重难点:委托。
三、实现项目需要的C#基础
(一)接口
关于详细接口讲解,请移步至下方博客,此处只对项目需要用到的接口部分进行讲解。
话不多说,先给代码
//定义一个生产鸭脖和鸭翅的工厂接口
public interface IProductionFactory
{
// 生产鸭脖的方法
void ProduceDuckNeck();
// 生产鸭翅的方法
void ProduceDuckWing();
}
定义接口 IProductionFactory,包含生产鸭脖和鸭翅的方法,没有具体的实现,我们在类里面来实现。
(二)类
1.武汉工厂
// 武汉工厂能生产鸭脖和鸭翅
public class WuhanFactory : IProductionFactory
{
public void ProduceDuckNeck()
{
Console.WriteLine("武汉工厂生产鸭脖");
}
public void ProduceDuckWing()
{
Console.WriteLine("武汉工厂生产鸭翅");
}
}
在武汉工厂类中,我们实现接口 IProductionFactory,其中,我们实例化了两个函数:一个是生产鸭脖的,另一个生产鸭翅,用于具体的生产工厂。
2.南京工厂
// 南京工厂只能生产鸭翅
public class NanjingFactory : IProductionFactory
{
//public void ProduceDuckNeck(){}不支持生产鸭脖,所以不实现
public void ProduceDuckNeck()
{
Console.WriteLine("南京工厂不支持生产鸭脖");
}
public void ProduceDuckWing()
{
Console.WriteLine("南京工厂生产鸭翅");
}
}
在南京工厂类中,我们实现接口 IProductionFactory,其中,我们实例化了两个函数:一个是生产鸭脖的,另一个生产鸭翅,但是南京工厂只能生产鸭翅,对于鸭脖来讲,我们只能说它不能生产,或者什么都不做。
3.长沙工厂
// 长沙工厂只能生产鸭脖
public class ChangshaFactory : IProductionFactory
{
public void ProduceDuckNeck()
{
Console.WriteLine("长沙工厂生产鸭脖");
}
public void ProduceDuckWing()
{
Console.WriteLine("长沙工厂不支持生产鸭翅");
}
}
在长沙工厂类中,类似于南京工厂,在这我们就不过多赘述了。
(三)委托
这里同样提供委托的传送门。
// 定义生产委托
public delegate void ProductionDelegate();
最后定义好委托之后,我们就能在主函数中,将委托派送到各个工厂了。
四、主函数实现
static void Main(string[] args)
{
// 创建武汉工厂实例
IProductionFactory wuhanFactory = new WuhanFactory();
// 创建武汉工厂生产委托
ProductionDelegate wuhanProductionDelegate = new ProductionDelegate(wuhanFactory.ProduceDuckNeck);
wuhanProductionDelegate += wuhanFactory.ProduceDuckWing;
// 执行武汉工厂生产委托
Console.WriteLine("武汉工厂生产情况:");
wuhanProductionDelegate.Invoke();
Console.WriteLine();
// 创建南京工厂实例
IProductionFactory nanjingFactory = new NanjingFactory();
// 创建南京工厂生产委托
ProductionDelegate nanjingProductionDelegate = new ProductionDelegate(nanjingFactory.ProduceDuckNeck);
nanjingProductionDelegate += nanjingFactory.ProduceDuckWing;
// 执行南京工厂生产委托
Console.WriteLine("南京工厂生产情况:");
nanjingProductionDelegate.Invoke();
Console.WriteLine();
// 创建长沙工厂实例
IProductionFactory changshaFactory = new ChangshaFactory();
// 创建长沙工厂生产委托
ProductionDelegate changshaProductionDelegate = new ProductionDelegate(changshaFactory.ProduceDuckNeck);
changshaProductionDelegate += changshaFactory.ProduceDuckWing;
// 执行长沙工厂生产委托
Console.WriteLine("长沙工厂生产情况:");
changshaProductionDelegate.Invoke();
}
提示,这道题,不使用委托,稍微简单一些。在这个实现中,我们将创建工厂实例,并通过直接调用接口方法来生产鸭脖和鸭翅,而不是使用委托。委托在这种情况下可能不是必需的,因为我们已经有了明确的接口方法。
但是在实际应用中,使用委托通常是为了实现更高级的功能,比如回调函数、事件处理或者动态方法调用。
五、学习心得
通过本次作业,我学会了C#运用类、接口、委托来实现对周黑鸭工厂的产品生产统一管理。熟悉了接口、委托的基本结构及用法。
当然,感谢AI在我编写解释时的检查,和最后代码的核查,让我同时也掌握了AI的用法。
六、完整代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection.Emit;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
namespace windows_design
{
internal class Program
{
// 定义生产委托
public delegate void ProductionDelegate();
//定义一个生产鸭脖和鸭翅的工厂接口
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(){}不支持生产鸭脖,所以不实现
public void ProduceDuckNeck()
{
Console.WriteLine("南京工厂不支持生产鸭脖");
}
public void ProduceDuckWing()
{
Console.WriteLine("南京工厂生产鸭翅");
}
}
// 长沙工厂只能生产鸭脖
public class ChangshaFactory : IProductionFactory
{
public void ProduceDuckNeck()
{
Console.WriteLine("长沙工厂生产鸭脖");
}
public void ProduceDuckWing()
{
Console.WriteLine("长沙工厂不支持生产鸭翅");
}
}
static void Main(string[] args)
{
// 创建武汉工厂实例
IProductionFactory wuhanFactory = new WuhanFactory();
// 创建武汉工厂生产委托
ProductionDelegate wuhanProductionDelegate = new ProductionDelegate(wuhanFactory.ProduceDuckNeck);
wuhanProductionDelegate += wuhanFactory.ProduceDuckWing;
// 执行武汉工厂生产委托
Console.WriteLine("武汉工厂生产情况:");
wuhanProductionDelegate.Invoke();
Console.WriteLine();
// 创建南京工厂实例
IProductionFactory nanjingFactory = new NanjingFactory();
// 创建南京工厂生产委托
ProductionDelegate nanjingProductionDelegate = new ProductionDelegate(nanjingFactory.ProduceDuckNeck);
nanjingProductionDelegate += nanjingFactory.ProduceDuckWing;
// 执行南京工厂生产委托
Console.WriteLine("南京工厂生产情况:");
nanjingProductionDelegate.Invoke();
Console.WriteLine();
// 创建长沙工厂实例
IProductionFactory changshaFactory = new ChangshaFactory();
// 创建长沙工厂生产委托
ProductionDelegate changshaProductionDelegate = new ProductionDelegate(changshaFactory.ProduceDuckNeck);
changshaProductionDelegate += changshaFactory.ProduceDuckWing;
// 执行长沙工厂生产委托
Console.WriteLine("长沙工厂生产情况:");
changshaProductionDelegate.Invoke();
}
}
}