目录
一、作业内容
1.题目
使用 C# 编码(涉及类、接口、委托等关键知识点),实现对周黑鸭工厂的产品生产统一管理,主要产品包括鸭脖和鸭翅。武汉工厂能生生产鸭脖和鸭翅,南京工厂只能生产鸭翅,长沙工厂只能生产鸭脖。
2.具体要求
- 定义接口 IProductionFactory,包含生产鸭脖和鸭翅的方法。
- 定义类 WuhanFactory、NanjingFactory、ChangshaFactory 分别实现接口 IProductionFactory,用于具体的生产工厂。
- 使用委托 ProductionDelegate 定义生产委托。
- 在 Main 函数中,创建不同工厂的实例,并通过生产委托进行生产。
二、实现
1.定义接口IProductionFactory
关于接口的知识点,可以参考下方链接
C#【高级篇】 C# 接口(Interface)_c# interface-CSDN博客
定义一个接口IProductionFactory,规定一个工厂需要实现的两个方法:ProduceDuckNeck
和 ProduceDuckWing
。
public interface IProductionFactory
{
void ProduceDuckNeck();
void ProduceDuckWing();
}
2.定义工厂类
定义了三个具体的工厂类,每个类都实现了 IProductionFactory
接口。不同的工厂类在 ProduceDuckNeck
和 ProduceDuckWing
方法中有不同的实现逻辑,代表不同工厂的生产能力。
2.1武汉工厂
武汉工厂可以生产鸭脖和鸭翅
public class WuhanFactory : IProductionFactory
{
public void ProduceDuckNeck()
{
Console.WriteLine("武汉工厂生产鸭脖");
}
public void ProduceDuckWing()
{
Console.WriteLine("武汉工厂生产鸭翅");
}
}
2.2南京工厂
南京工厂只能生产鸭翅
public class NanjingFactory : IProductionFactory
{
public void ProduceDuckNeck()
{
throw new NotImplementedException("南京工厂不生产鸭脖");
}
public void ProduceDuckWing()
{
Console.WriteLine("南京工厂生产鸭翅");
}
}
2.3长沙工厂
长沙工厂只能生产鸭脖
public class ChangshaFactory : IProductionFactory
{
public void ProduceDuckNeck()
{
Console.WriteLine("长沙工厂生产鸭脖");
}
public void ProduceDuckWing()
{
throw new NotImplementedException("长沙工厂不生产鸭翅");
}
}
3.定义生产委托
关于委托的知识点可以参考下方链接
public delegate void ProductionDelegate();
4.main函数实现
在 Main
函数中,首先创建了不同工厂的实例。然后,定义了两个委托实例 produceDuckNeck
和 produceDuckWing
,并将它们分别指向 ProduceDuckNeck
和 ProduceDuckWing
方法。这两个方法在这里只是模拟生产前的准备步骤,并没有实际的生产逻辑。
接下来,通过 ProduceWithFactory
方法来模拟生产过程。这个方法接受一个工厂实例和一个生产委托作为参数,并尝试通过工厂来生产鸭脖和鸭翅。如果工厂不能生产某种产品,会抛出 NotImplementedException
异常,该异常会被捕获并输出相应的信息。
class Program
{
static void Main(string[] args)
{
// 创建工厂实例
IProductionFactory wuhanFactory = new WuhanFactory();
IProductionFactory nanjingFactory = new NanjingFactory();
IProductionFactory changshaFactory = new ChangshaFactory();
// 定义生产鸭脖和鸭翅的委托
ProductionDelegate produceDuckNeck = new ProductionDelegate(ProduceDuckNeck);
ProductionDelegate produceDuckWing = new ProductionDelegate(ProduceDuckWing);
// 通过委托进行生产
ProduceWithFactory(wuhanFactory, produceDuckNeck);
Console.WriteLine("\n");
ProduceWithFactory(wuhanFactory, produceDuckWing);
Console.WriteLine("\n");
ProduceWithFactory(nanjingFactory, produceDuckWing);
Console.WriteLine("\n");
ProduceWithFactory(changshaFactory, produceDuckNeck);
Console.WriteLine("\n");
void ProduceDuckNeck()
{
Console.WriteLine("生产鸭脖");
}
void ProduceDuckWing()
{
Console.WriteLine("生产鸭翅");
}
void ProduceWithFactory(IProductionFactory factory, ProductionDelegate productionDelegate)
{
try
{
productionDelegate();
factory.ProduceDuckNeck();
}
catch (NotImplementedException)
{
Console.WriteLine("这家工厂不能生产鸭脖");
}
try
{
productionDelegate();
factory.ProduceDuckWing();
}
catch (NotImplementedException)
{
Console.WriteLine("这家工厂不能生产鸭翅");
}
}
}
}
三.整体代码
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 NotImplementedException("南京工厂不生产鸭脖");
}
public void ProduceDuckWing()
{
Console.WriteLine("南京工厂生产鸭翅");
}
}
public class ChangshaFactory : IProductionFactory
{
public void ProduceDuckNeck()
{
Console.WriteLine("长沙工厂生产鸭脖");
}
public void ProduceDuckWing()
{
throw new NotImplementedException("长沙工厂不生产鸭翅");
}
}
public delegate void ProductionDelegate();
class Program
{
static void Main(string[] args)
{
// 创建工厂实例
IProductionFactory wuhanFactory = new WuhanFactory();
IProductionFactory nanjingFactory = new NanjingFactory();
IProductionFactory changshaFactory = new ChangshaFactory();
// 定义生产鸭脖和鸭翅的委托
ProductionDelegate produceDuckNeck = new ProductionDelegate(ProduceDuckNeck);
ProductionDelegate produceDuckWing = new ProductionDelegate(ProduceDuckWing);
// 通过委托进行生产
ProduceWithFactory(wuhanFactory, produceDuckNeck);
Console.WriteLine("\n");
ProduceWithFactory(wuhanFactory, produceDuckWing);
Console.WriteLine("\n");
ProduceWithFactory(nanjingFactory, produceDuckWing);
Console.WriteLine("\n");
ProduceWithFactory(changshaFactory, produceDuckNeck);
Console.WriteLine("\n");
void ProduceDuckNeck()
{
Console.WriteLine("生产鸭脖");
}
void ProduceDuckWing()
{
Console.WriteLine("生产鸭翅");
}
void ProduceWithFactory(IProductionFactory factory, ProductionDelegate productionDelegate)
{
try
{
productionDelegate();
factory.ProduceDuckNeck();
}
catch (NotImplementedException)
{
Console.WriteLine("这家工厂不能生产鸭脖");
}
try
{
productionDelegate();
factory.ProduceDuckWing();
}
catch (NotImplementedException)
{
Console.WriteLine("这家工厂不能生产鸭翅");
}
}
}
}
四.运行结果
五.学习心得
通过本次作业,我学会了C#运用类、接口、委托来实现对周黑鸭工厂的产品生产统一管理。熟悉了接口、委托的基本结构及用法。在本题中不使用委托可能会简单一些。委托在这种情况下可能不是必需的,因为我们已经有了明确的接口方法。但是在实际应用中,使用委托通常是为了实现更高级的功能,比如回调函数、事件处理或者动态方法调用。