1.作业要求
使用 C# 编码(涉及类、接口、委托等关键知识点),实现对周黑鸭工厂的产品生产统一管理,主要产品包括鸭脖和鸭翅。武汉工厂能生生产鸭脖和鸭翅,南京工厂只能生产鸭翅,长沙工厂只能生产鸭脖。具体要求如下:
- 定义接口 IProductionFactory,包含生产鸭脖和鸭翅的方法。
- 定义类 WuhanFactory、NanjingFactory、ChangshaFactory 分别实现接口 IProductionFactory,用于具体的生产工厂。
- 使用委托 ProductionDelegate 定义生产委托。
- 在 Main 函数中,创建不同工厂的实例,并通过生产委托进行生产。
2.定义接口
public interface IProductionFactory
{
void ProduceDuckNeck();
void ProduceDuckWing();
}
- 这个接口定义了两个方法
ProduceDuckNeck()
和ProduceDuckWing()
,用于表示工厂生产鸭脖和鸭翅的行为。通过接口,实现了工厂类之间的统一标准。这样,不同工厂的生产过程可以通过相同的接口方法进行管理。
3.定义委托
delegate void ProductionDelegate();
- 这个委托用作生产委托,允许将一个或多个方法关联到委托实例上。这里,委托用于将生产行为绑定到特定的工厂实例中,通过委托来调用生产方法。
4.定义类
4.1 武汉工厂类
class WuhanFactory : IProductionFactory
{
public void ProduceDuckNeck()
{
Console.WriteLine("Wuhan Factory produces Duck Neck.");
}
public void ProduceDuckWing()
{
Console.WriteLine("Wuhan Factory produces Duck Wing.");
}
}
4.2 南京工厂类
class NanjingFactory : IProductionFactory
{
public void ProduceDuckNeck()
{
Console.WriteLine("Nanjing Factory does not produce Duck Neck.");
}
public void ProduceDuckWing()
{
Console.WriteLine("Nanjing Factory produces Duck Wing.");
}
}
4.3 长沙工厂类
class ChangshaFactory : IProductionFactory
{
public void ProduceDuckNeck()
{
Console.WriteLine("Changsha Factory produces Duck Neck.");
}
public void ProduceDuckWing()
{
Console.WriteLine("Changsha Factory does not produce Duck Wing.");
}
}
- 这三个类分别实现了
IProductionFactory
接口,具体实现了各自工厂能生产的不同的周黑鸭产品。每个工厂类实现了生产鸭脖和鸭翅的方法,根据工厂的生产能力不同进行了不同的实现。
5.功能实现
5.1 主函数实现
class Program
{
static void Main()
{
// 实例化不同工厂
WuhanFactory wuhanFactory = new WuhanFactory();
NanjingFactory nanjingFactory = new NanjingFactory();
ChangshaFactory changshaFactory = new ChangshaFactory();
// 使用委托生产
ProductionDelegate productionDelegate;
// 武汉工厂生产
productionDelegate = wuhanFactory.ProduceDuckNeck;
productionDelegate += wuhanFactory.ProduceDuckWing;
Console.WriteLine("Products from Wuhan Factory:");
productionDelegate();
Console.WriteLine();
// 南京工厂生产
productionDelegate = nanjingFactory.ProduceDuckNeck;
productionDelegate += nanjingFactory.ProduceDuckWing;
Console.WriteLine("Products from Nanjing Factory:");
productionDelegate();
Console.WriteLine();
// 长沙工厂生产
productionDelegate = changshaFactory.ProduceDuckNeck;
productionDelegate += changshaFactory.ProduceDuckWing;
Console.WriteLine("Products from Changsha Factory:");
productionDelegate();
}
}
在Main函数中,首先实例化了武汉工厂、南京工厂和长沙工厂的对象。然后通过创建委托实例,将每个工厂实例的生产方法与委托绑定。通过调用委托,可以实现对不同工厂的生产行为的管理和调用。
5.2 结果展示
Products from Wuhan Factory:
Wuhan Factory produces Duck Neck.
Wuhan Factory produces Duck Wing.
Products from Nanjing Factory:
Nanjing Factory does not produce Duck Neck.
Nanjing Factory produces Duck Wing.
Products from Changsha Factory:
Changsha Factory produces Duck Neck.
Changsha Factory does not produce Duck Wing.
6.设计思路与难点
6.1 设计思路
- 通过定义接口和委托,实现了工厂生产行为的抽象和统一管理。工厂类实现了接口定义的生产方法,使工厂之间的操作具备一致性,方便扩展和维护。
- 使用委托将生产行为与具体工厂实例解耦,实现了生产操作的灵活性和可配置性。通过委托,可以动态切换和管理不同工厂的生产任务。
6.2 主要难点
- 需要较好的理解委托的概念和用法,知道将委托与对应方法绑定,实现对不同工厂生产行为的统一性管理。
- 需要熟悉接口的概念和作用,以及通过接口来定义规范的生产行为。
- 需要考虑不同工厂的生产能力差异,确保每个工厂类都能正确实现接口定义的生产方法。
7.完整代码
using System;
// 定义接口 IProductionFactory
interface IProductionFactory
{
void ProduceDuckNeck();
void ProduceDuckWing();
}
// 定义委托 ProductionDelegate
delegate void ProductionDelegate();
// 实现武汉工厂
class WuhanFactory : IProductionFactory
{
public void ProduceDuckNeck()
{
Console.WriteLine("Wuhan Factory produces Duck Neck.");
}
public void ProduceDuckWing()
{
Console.WriteLine("Wuhan Factory produces Duck Wing.");
}
}
// 实现南京工厂
class NanjingFactory : IProductionFactory
{
public void ProduceDuckNeck()
{
Console.WriteLine("Nanjing Factory does not produce Duck Neck.");
}
public void ProduceDuckWing()
{
Console.WriteLine("Nanjing Factory produces Duck Wing.");
}
}
// 实现长沙工厂
class ChangshaFactory : IProductionFactory
{
public void ProduceDuckNeck()
{
Console.WriteLine("Changsha Factory produces Duck Neck.");
}
public void ProduceDuckWing()
{
Console.WriteLine("Changsha Factory does not produce Duck Wing.");
}
}
class Program
{
static void Main()
{
// 实例化不同工厂
WuhanFactory wuhanFactory = new WuhanFactory();
NanjingFactory nanjingFactory = new NanjingFactory();
ChangshaFactory changshaFactory = new ChangshaFactory();
// 使用委托进行生产
ProductionDelegate productionDelegate;
// 武汉工厂生产
productionDelegate = wuhanFactory.ProduceDuckNeck;
productionDelegate += wuhanFactory.ProduceDuckWing;
Console.WriteLine("Products from Wuhan Factory:");
productionDelegate();
Console.WriteLine();
// 南京工厂生产
productionDelegate = nanjingFactory.ProduceDuckNeck;
productionDelegate += nanjingFactory.ProduceDuckWing;
Console.WriteLine("Products from Nanjing Factory:");
productionDelegate();
Console.WriteLine();
// 长沙工厂生产
productionDelegate = changshaFactory.ProduceDuckNeck;
productionDelegate += changshaFactory.ProduceDuckWing;
Console.WriteLine("Products from Changsha Factory:");
productionDelegate();
}
}
8.实验小结
通过这样的实验设计,实现了对周黑鸭工厂产品生产的灵活统一管理,且代码具有扩展性和可维护性,比较方便后续添加新的工厂或者调整生产流程。