目录
一,内容阐述
使用 C# 编码(涉及类、接口、委托等关键知识点),实现对周黑鸭工厂的产品生产统一管理,主要产品包括鸭脖和鸭翅。武汉工厂能生生产鸭脖和鸭翅,南京工厂只能生产鸭翅,长沙工厂只能生产鸭脖。
二,代码的主要思路
定义接口:IProductionFactory 接口定义了工厂应该具备的基本生产功能,即生产鸭脖和鸭翅。
实现工厂类:每个工厂类(WuhanFactory、NanjingFactory、ChangshaFactory)都实现了 ProductionFactory接口,并根据工厂的实际生产能力实现了接口中的方法。对于不能生产 的 产品,工厂类抛出了NotSupportedException异常。
定义委托:ProductionDelegate委托定义了一个方法签名,它匹配工厂类中生产方法的签名,用于 在运行时动态地绑定到具体的方法上。
在Main函数中创建实例:创建不同工厂的实例,并创建委托实例,绑定到一个通用的生产方法 。
使用委托进行生产:通过委托实例调用生产方法,可以方便地切换生产的产品类型。此外,也可 以直接使用委托的Invoke方法,并指定具体的工厂实例来生产特定的产品。
三,代码部分
using System;
// 定义生产委托
public delegate void ProductionDelegate(string productName);
// 定义生产工厂的接口
public interface IProductionFactory
{
void ProduceDuckNeck();
void ProduceDuckWing();
}
// 武汉工厂类,实现了IProductionFactory接口
public class WuhanFactory : IProductionFactory
{
public void ProduceDuckNeck()
{
Console.WriteLine("武汉工厂生产了鸭脖。");
}
public void ProduceDuckWing()
{
Console.WriteLine("武汉工厂生产了鸭翅。");
}
}
// 南京工厂类,实现了IProductionFactory接口
public class NanjingFactory : IProductionFactory
{
public void ProduceDuckNeck()
{
throw new NotSupportedException("南京工厂不能生产鸭脖。");
}
public void ProduceDuckWing()
{
Console.WriteLine("南京工厂生产了鸭翅。");
}
}
// 长沙工厂类,实现了IProductionFactory接口
public class ChangshaFactory : IProductionFactory
{
public void ProduceDuckNeck()
{
Console.WriteLine("长沙工厂生产了鸭脖。");
}
public void ProduceDuckWing()
{
throw new NotSupportedException("长沙工厂不能生产鸭翅。");
}
}
class Program
{
static void Main(string[] args)
{
// 创建生产委托的实例
ProductionDelegate productionDelegate = new ProductionDelegate(ProduceProduct);
// 创建不同工厂的实例
IProductionFactory wuhanFactory = new WuhanFactory();
IProductionFactory nanjingFactory = new NanjingFactory();
IProductionFactory changshaFactory = new ChangshaFactory();
// 使用委托进行生产
productionDelegate("鸭脖"); // 这里假设要生产鸭脖
productionDelegate("鸭翅"); // 这里假设要生产鸭翅
// 指定工厂进行生产
productionDelegate.Invoke(wuhanFactory, "鸭脖");
productionDelegate.Invoke(wuhanFactory, "鸭翅");
productionDelegate.Invoke(nanjingFactory, "鸭翅");
productionDelegate.Invoke(changshaFactory, "鸭脖");
}
// 生产方法,作为委托的调用目标
static void ProduceProduct(string productName)
{
Console.WriteLine("生产了 " + productName);
}
}
四,难点
接口的设计:确保接口定义的方法足够通用,能够涵盖所有工厂的共同点,同时不引入不必要的复杂性。
工厂类的实现:根据工厂的实际能力实现接口方法,需要考虑到不同工厂之间的差异性。
委托的使用:委托是C#中用于实现回调和事件驱动编程的强大工具,理解其原理和使用场景是关键。在本例中,委托用于动态绑定生产方法,提高了代码的灵活性和可维护性。