目录
1.作业内容
使用 C# 编码(涉及类、接口、委托等关键知识点),实现对周黑鸭工厂的产品生产统一管理,主要产品包括鸭脖和鸭翅。武汉工厂能生生产鸭脖和鸭翅,南京工厂只能生产鸭翅,长沙工厂只能生产鸭脖。具体要求如下: 定义接口 IProductionFactory,包含生产鸭脖和鸭翅的方法。 定义类 WuhanFactory、NanjingFactory、ChangshaFactory 分别实现接口 IProductionFactory,用于具体的生产工厂。 使用委托 ProductionDelegate 定义生产委托。 在 Main 函数中,创建不同工厂的实例,并通过生产委托进行生产。
2.实现思路
为了实现这个需求,首先定义一个接口 IProductionFactory
,它包含了生产鸭脖和鸭翅的方法。然后,定义三个工厂类 WuhanFactory
、NanjingFactory
、和 ChangshaFactory
,分别实现这个接口。由于南京工厂只能生产鸭翅,长沙工厂只能生产鸭脖,所以它们在实现接口时会有所区别。
接下来,使用委托 ProductionDelegate
来定义一个生产委托,这将在运行时动态地调用生产方法。最后,在 Main
函数中,创建不同工厂的实例,并通过生产委托进行生产。
3.具体实现
3.1 定义生产接口
public interface IProductionFactory
{
void ProduceDuckNeck();
void ProduceDuckWing();
}
3.2 定义三个工厂
3.2.1 武汉工厂
public class WuhanFactory : IProductionFactory
{
public void ProduceDuckNeck()
{
Console.WriteLine("武汉工厂生产鸭脖");
}
public void ProduceDuckWing()
{
Console.WriteLine("武汉工厂生产鸭翅");
}
}
3.2.2 南京工厂
public class NanjingFactory : IProductionFactory
{
public void ProduceDuckNeck()
{
Console.WriteLine("南京工厂不能生产鸭脖");
}
public void ProduceDuckWing()
{
Console.WriteLine("南京工厂生产鸭翅");
}
}
3.2.3 长沙工厂
public class ChangshaFactory : IProductionFactory
{
public void ProduceDuckNeck()
{
Console.WriteLine("长沙工厂生产鸭脖");
}
public void ProduceDuckWing()
{
Console.WriteLine("长沙工厂不能生产鸭翅");
}
}
3.3 定义委托
public delegate void ProductionDelegate();
3.4 Main函数实现
3.4.1 创建工厂
WuhanFactory wuhanFactory = new WuhanFactory();
NanjingFactory nanjingFactory = new NanjingFactory();
ChangshaFactory changshaFactory = new ChangshaFactory();
3.4.2 使用委托进行生产
ProductionDelegate wuhanProductionNeck = new ProductionDelegate(wuhanFactory.ProduceDuckNeck);
ProductionDelegate wuhanProductionWing = new ProductionDelegate(wuhanFactory.ProduceDuckWing);
ProductionDelegate nanjingProductionWing = new ProductionDelegate(nanjingFactory.ProduceDuckWing);
ProductionDelegate changshaProductionNeck = new ProductionDelegate(changshaFactory.ProduceDuckNeck);
3.4.3 执行生产
wuhanProductionNeck();
wuhanProductionWing();
nanjingProductionWing();
changshaProductionNeck();
4.完整代码及运行结果
4.1 完整代码
using System;
namespace DuckFactoryDemo
{
// 定义生产接口
public interface IProductionFactory
{
void ProduceDuckNeck();
void ProduceDuckWing();
}
// 定义委托
public delegate void ProductionDelegate();
// 武汉工厂
public class WuhanFactory : IProductionFactory
{
public void ProduceDuckNeck()
{
Console.WriteLine("武汉工厂生产鸭脖");
}
public void ProduceDuckWing()
{
Console.WriteLine("武汉工厂生产鸭翅");
}
}
// 南京工厂
public class NanjingFactory : IProductionFactory
{
public void ProduceDuckNeck()
{
Console.WriteLine("南京工厂不能生产鸭脖");
}
public void ProduceDuckWing()
{
Console.WriteLine("南京工厂生产鸭翅");
}
}
// 长沙工厂
public class ChangshaFactory : IProductionFactory
{
public void ProduceDuckNeck()
{
Console.WriteLine("长沙工厂生产鸭脖");
}
public void ProduceDuckWing()
{
Console.WriteLine("长沙工厂不能生产鸭翅");
}
}
class Program
{
static void Main(string[] args)
{
// 创建工厂实例
WuhanFactory wuhanFactory = new WuhanFactory();
NanjingFactory nanjingFactory = new NanjingFactory();
ChangshaFactory changshaFactory = new ChangshaFactory();
// 使用委托进行生产
ProductionDelegate wuhanProductionNeck = new ProductionDelegate(wuhanFactory.ProduceDuckNeck);
ProductionDelegate wuhanProductionWing = new ProductionDelegate(wuhanFactory.ProduceDuckWing);
ProductionDelegate nanjingProductionWing = new ProductionDelegate(nanjingFactory.ProduceDuckWing);
ProductionDelegate changshaProductionNeck = new ProductionDelegate(changshaFactory.ProduceDuckNeck);
// 执行生产
wuhanProductionNeck();
wuhanProductionWing();
nanjingProductionWing();
changshaProductionNeck();
}
}
}
4.2 运行结果
5.总结
5.1 核心点
5.1.1 接口定义
通过定义一个接口来规定所有工厂类必须实现的方法,即生产鸭脖(ProduceDuckNeck
)和鸭翅(ProduceDuckWing
)。这样做可以确保不同的工厂类有统一的行为标准。
5.1.2 类实现
WuhanFactory
、NanjingFactory
和 ChangshaFactory
类分别实现了 IProductionFactory
接口。这些类根据各自的生产能力,实现了接口中定义的方法。
5.1.3委托
委托被用作封装具体方法的引用,允许在运行时动态地调用这些方法。
5.1.4动态方法调用
在 Main
函数中,通过创建委托实例,将特定工厂的生产方法与委托关联起来,然后通过调用委托来执行具体的生产动作。
5.2 注意事项
5.2.1接口方法实现
当一个类实现一个接口时,它必须提供接口中所有方法的具体实现。在本例中,南京和长沙工厂分别不能生产鸭脖和鸭翅,但它们仍然提供了方法的实现,虽然这些实现只是输出一条信息。
5.2.2委托的使用
委托需要被实例化才能使用,实例化委托时必须提供一个与委托有相同签名的方法。在本例中,传递了工厂实例的方法。
5.3 心得体会
5.3.1 接口的作用
接口在这里起到了定义规范的作用,它允许编写出可扩展和可互换的代码,因为任何实现了 IProductionFactory
接口的类都可以被用来生产产品。
5.3.2 设计模式的应用
这个示例展示了工厂模式的简单应用,其中工厂类负责具体产品的创建过程。这种模式有助于减少系统中的耦合,并提高了代码的灵活性和可维护性。
5.3.3委托的灵活性
委托提供了一种将方法作为参数传递的方式,这在编写事件驱动程序或回调时非常有用。在本例中,委托使得生产调用更加灵活。