目录
一、作业要求:
使用 C# 编码(涉及类、接口、委托等关键知识点),实现对周黑鸭工厂的产品生产统一管理,主要产品包括鸭脖和鸭翅。武汉工厂能生生产鸭脖和鸭翅,南京工厂只能生产鸭翅,长沙工厂只能生产鸭脖。
二、设计思路:
- 定义接口:
定义一个IProductionFactory
接口,该接口包含所有工厂都应该具备的基本生产能力,即生产鸭脖和鸭翅的方法。 - 实现具体工厂类:
根据实际需求,创建实现IProductionFactory
接口的具体工厂类,如WuhanFactory
、NanjingFactory
和ChangshaFactory
。 - 引入委托:
使用委托ProductionDelegate
来表示生产操作。 - 编写主程序:
在Main
函数中,创建各个工厂类的实例,并初始化生产委托。通过生产委托来调用不同工厂的生产方法,实现产品的生产。
三、代码实现:
using System;
// 定义产品接口
public interface IProductionFactory
{
bool CanProduceDuckNeck { get; }
bool CanProduceDuckWing { get; }
void ProduceDuckNeck();
void ProduceDuckWing();
}
// 武汉工厂,可以生产鸭脖和鸭翅
public class WuhanFactory : IProductionFactory
{
public bool CanProduceDuckNeck => true;
public bool CanProduceDuckWing => true;
public void ProduceDuckNeck()
{
Console.WriteLine("武汉工厂生产鸭脖");
}
public void ProduceDuckWing()
{
Console.WriteLine("武汉工厂生产鸭翅");
}
}
// 南京工厂,只能生产鸭翅
public class NanjingFactory : IProductionFactory
{
public bool CanProduceDuckNeck => false;
public bool CanProduceDuckWing => true;
public void ProduceDuckNeck()
{
throw new NotImplementedException("南京工厂不能生产鸭脖");
}
public void ProduceDuckWing()
{
Console.WriteLine("南京工厂生产鸭翅");
}
}
// 长沙工厂,只能生产鸭脖
public class ChangshaFactory : IProductionFactory
{
public bool CanProduceDuckNeck => true;
public bool CanProduceDuckWing => false;
public void ProduceDuckNeck()
{
Console.WriteLine("长沙工厂生产鸭脖");
}
public void ProduceDuckWing()
{
throw new NotImplementedException("长沙工厂不能生产鸭翅");
}
}
class Program
{
static void Main(string[] args)
{
// 创建工厂实例
IProductionFactory wuhanFactory = new WuhanFactory();
IProductionFactory nanjingFactory = new NanjingFactory();
IProductionFactory changshaFactory = new ChangshaFactory();
// 使用工厂的方法,并根据能力进行检查
if (wuhanFactory.CanProduceDuckNeck)
{
wuhanFactory.ProduceDuckNeck(); // 武汉工厂生产鸭脖
}
else
{
Console.WriteLine("武汉工厂不能生产鸭脖");
}
if (wuhanFactory.CanProduceDuckWing)
{
wuhanFactory.ProduceDuckWing(); // 武汉工厂生产鸭翅
}
else
{
Console.WriteLine("武汉工厂不能生产鸭翅");
}
if (nanjingFactory.CanProduceDuckNeck)
{
nanjingFactory.ProduceDuckNeck(); // 南京工厂生产鸭脖
}
else
{
Console.WriteLine("南京工厂不能生产鸭脖");
}
if (nanjingFactory.CanProduceDuckWing)
{
nanjingFactory.ProduceDuckWing(); // 南京工厂生产鸭翅
}
else
{
Console.WriteLine("南京工厂不能生产鸭翅");
}
if (changshaFactory.CanProduceDuckNeck)
{
changshaFactory.ProduceDuckNeck(); // 长沙工厂生产鸭脖
}
else
{
Console.WriteLine("长沙工厂不能生产鸭脖");
}
if (changshaFactory.CanProduceDuckWing)
{
changshaFactory.ProduceDuckWing(); // 长沙工厂生产鸭翅
}
else
{
Console.WriteLine("长沙工厂不能生产鸭翅");
}
}
}
运行结果:
四、难点分析:
- 接口定义与实现:
在定义IProductionFactory
接口时,需要确保接口的方法能够准确反映工厂的生产能力,同时又要避免代码过于复杂。 - 异常处理:
当工厂无法生产特定的产品时,应该抛出异常以表示错误。但是,如何设计合理的异常类型、何时抛出异常以及如何在主程序中捕获和处理这些异常,需要深入考虑。
五、总结:
通过定义接口、实现具体工厂类、引入委托以及编写主程序等步骤,我们可以实现一个基本的工厂生产管理系统。然而,在实际应用中,还需要考虑异常处理、委托使用、代码扩展性和可读性等方面的改进,以确保系统的灵活性和可维护性。