1.作业内容:
使用 C# 编码(涉及类、接口、委托等关键知识点),实现对周黑鸭工厂的产品生产统一管理,主要产品包括鸭脖和鸭翅。武汉工厂能生生产鸭脖和鸭翅,南京工厂只能生产鸭翅,长沙工厂只能生产鸭脖。具体要求如下:
- 定义接口 IProductionFactory,包含生产鸭脖和鸭翅的方法。
- 定义类 WuhanFactory、NanjingFactory、ChangshaFactory 分别实现接口 IProductionFactory,用于具体的生产工厂。
- 使用委托 ProductionDelegate 定义生产委托。
- 在 Main 函数中,创建不同工厂的实例,并通过生产委托进行生产。
2. 设计思路分析与难点
在面向对象编程中,接口定义了方法的规范,委托则允许在运行时选择具体的方法执行,这两者同时使用,使得不同的工厂类可以根据需要实现这些方法,增强了程序的灵活性和扩展性,提高了代码的动态性。总体上讲,该系统的设计围绕接口和委托展开。然而,如何处理工厂生产能力的差异性是一个较为棘手的问题。例如,南京工厂无法生产鸭翅。在这种情况下,我们需要一种机制来优雅地处理不支持的生产操作。为了处理这一问题,我们可以利用接口方法的实现来体现生产能力的差异性。对于不支持的方法,我们可以在其实现中抛出 NotImplementedException 异常。这样做的好处是,在程序尝试执行不支持的操作时,会明确地抛出异常,使错误处理变得更加明确。通过这种设计,我们可以在接口中定义所有可能的生产方法,每个工厂类根据自身能力实现所需的方法。当调用不支持的方法时,会抛出 NotImplementedException 异常,并通过异常处理机制输出相应的错误信息。这种方式使得系统能够在运行时动态地适应不同工厂的生产能力,同时提供了明确的错误处理机制。
3.定义接口
// 定义接口 IProductionFactory,包含生产鸭脖和鸭翅的方法。
public interface IProductionFactory
{
void ProduceDuckNeck();
void ProduceDuckWing();
}
4. 定义类
// 定义类 WuhanFactory、NanjingFactory、ChangshaFactory 分别实现接口 IProductionFactory,用于具体的生产工厂。
public class WuhanFactory : IProductionFactory
{
public void ProduceDuckNeck()
{
Console.WriteLine("武汉工厂生产鸭脖。");
}
public void ProduceDuckWing()
{
Console.WriteLine("武汉工厂生产鸭翅。");
}
}
public class NanjingFactory : IProductionFactory
{
public void ProduceDuckNeck()
{
throw new NotSupportedException("南京工厂无法生产鸭脖。");
}
public void ProduceDuckWing()
{
Console.WriteLine("南京工厂生产鸭翅。");
}
}
public class ChangshaFactory : IProductionFactory
{
public void ProduceDuckNeck()
{
Console.WriteLine("长沙工厂生产鸭脖。");
}
public void ProduceDuckWing()
{
throw new NotSupportedException("长沙工厂无法生产鸭翅。");
}
}
5.定义委托
// 定义委托 ProductionDelegate
public delegate void ProductionDelegate();
6.具体实现
public static void FactoryProduct(ProductionDelegate productionDelegate)
{
// 如果委托无误,正常调用
try
{
productionDelegate();
}
// 如果捕获到异常,则输出错误信息
catch (NotImplementedException e)
{
Console.WriteLine(e.Message);
}
}
private static void Main(string[] args)
{
// 创建工厂实例
IProductionFactory wuhanFactory, nanjingFactory, changshaFactory;
wuhanFactory = new WuhanFactory();
nanjingFactory = new NanjingFactory();
changshaFactory = new ChangshaFactory();
// 实现委托
ProductionDelegate wuhanDelegate, nanjingDelegate, changshaDelegate;
wuhanDelegate = wuhanFactory.ProduceDuckNeck;
wuhanDelegate += wuhanFactory.ProduceDuckWing;
nanjingDelegate = nanjingFactory.ProduceDuckWing;
changshaDelegate = changshaFactory.ProduceDuckNeck;
// 通过委托进行生产
FactoryProduct(wuhanDelegate);
FactoryProduct(nanjingDelegate);
FactoryProduct(changshaDelegate);
}
}
7.运行结果
8.实验小结
该实验展示了使用接口、工厂类、委托和异常处理来实现工厂生产过程,并输出相应的错误信息。通过定义接口 IProductionFactory 和实现类 WuhanFactory、NanjingFactory、ChangshaFactory,我们可以在不同的工厂中实现相同的生产方法。使用委托 ProductionDelegate 可以将多个方法封装为一个可执行的单元,并通过异常处理机制来处理可能出现的错误情况。
8.代码地址
代码仓库:https://github.com/zhiyinnitaimei6/windows-/blob/main/vs
9.改进思路
1.工厂能力检查机制:引入能力检查方法,提前检查工厂是否支持特定的生产操作,避免不必要的异常抛出。
2.工厂能力配置:从外部配置文件或数据库中读取工厂的生产能力信息,实现动态调整工厂的生产能力。
3.异常处理的优化:使用日志记录器记录异常信息,提供更完善的异常处理和错误追踪机制。