题目:
使用 C# 编码(涉及类、接口、委托等关键知识点),实现对周黑鸭工厂的产品生产统一管理,主要产品包括鸭脖和鸭翅。武汉工厂能生生产鸭脖和鸭翅,南京工厂只能生产鸭翅,长沙工厂只能生产鸭脖。具体要求如下:
- 定义接口 IProductionFactory,包含生产鸭脖和鸭翅的方法。
- 定义类 WuhanFactory、NanjingFactory、ChangshaFactory 分别实现接口 IProductionFactory,用于具体的生产工厂。
- 使用委托 ProductionDelegate 定义生产委托。
- 在 Main 函数中,创建不同工厂的实例,并通过生产委托进行生产。
解析:
接口定义 :
IProductionFactory
接口定义了工厂可能会执行的两个方法:ProduceDuckNeck
和ProduceDuckWing
。工厂实现 :每个工厂类(
WuhanFactory
,NanjingFactory
,ChangshaFactory
)都实现了IProductionFactory
接口,并根据具体的生产方法的不同调用不同的接口方法。例如,WuhanFactory
可以生产鸭脖和鸭翅,而NanjingFactory
只能生产鸭翅。委托定义 :
ProductionDelegate
委托类型用于将工厂对象作为参数,并调用其生产方法。这样,委托可以作为生产方法的引用,从而在不同的工厂上执行相同的操作。异常处理 :而对于不做某些接口方法的工厂类(例如南京工厂不支持生产鸭脖),则对应的方法会抛出
NotSupportedException
。在调用这些方法时,代码通过try-catch
块捕获并处理这些异常。委托调用 :在
Main
方法中,委托被用来调用工厂的生产方法。将委托指向不同的工厂对象,而无需修改调用代码,就可以在不同的工厂中选择生产鸭脖或者鸭翅。
代码:
cs
using System;
namespace ZhouHeiYa
{
//定义接口
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 NotSupportedException("南京工厂不能生产鸭脖");
}
public void ProduceDuckWing()
{
Console.WriteLine("南京工厂生产鸭翅");
}
}
public class ChangshaFactory : IProductionFactory
{
public void ProduceDuckNeck()
{
Console.WriteLine("长沙工厂生产鸭脖");
Console.ReadLine();
}
public void ProduceDuckWing()
{
throw new NotSupportedException("长沙工厂不能生产鸭翅");
}
}
public delegate void ProductionDelegate(IProductionFactory factory);//定义生产委托
internal class Program
{
static void Main(string[] args)
{
// 创建不同工厂实例
IProductionFactory wuhanFactory = new WuhanFactory();
IProductionFactory nanjingFactory = new NanjingFactory();
IProductionFactory changshaFactory = new ChangshaFactory();
// 创建生产委托
ProductionDelegate duckneck = ProduceDuckNeck;
ProductionDelegate duckwing = ProduceDuckWing;
// 使用委托调用工厂生产鸭脖和鸭翅
duckneck(wuhanFactory);
duckwing(wuhanFactory);
duckwing(nanjingFactory);
duckneck(changshaFactory);
try
{
duckneck(nanjingFactory);
}
catch (NotSupportedException ex)
{
Console.WriteLine(ex.Message);
}
try
{
duckwing(changshaFactory);
}
catch (NotSupportedException ex)
{
Console.WriteLine(ex.Message);
}
}
// 生产鸭脖的委托方法
static void ProduceDuckNeck(IProductionFactory factory)
{
factory.ProduceDuckNeck();
}
// 生产鸭翅的委托方法
static void ProduceDuckWing(IProductionFactory factory)
{
factory.ProduceDuckWing();
}
}
}