一.作业内容
使用 C# 编码(涉及类、接口、委托等关键知识点),实现对周黑鸭工厂的产品生产统一管理,主要产品包括鸭脖和鸭翅。武汉工厂能生生产鸭脖和鸭翅,南京工厂只能生产鸭翅,长沙工厂只能生产鸭脖。具体要求如下:
- 定义接口 IProductionFactory,包含生产鸭脖和鸭翅的方法。
- 定义类 WuhanFactory、NanjingFactory、ChangshaFactory 分别实现接口 IProductionFactory,用于具体的生产工厂。
- 使用委托 ProductionDelegate 定义生产委托。
- 在 Main 函数中,创建不同工厂的实例,并通过生产委托进行生产。
二.代码设计
1.设计思路:
-
定义接口
IProductionFactory
,其中包含两个方法:ProduceDuckNeck
和ProduceDuckWing
,分别用于生产鸭脖和鸭翅。 -
创建三个具体的工厂类
WuhanFactory
、NanjingFactory
和ChangshaFactory
,它们分别实现IProductionFactory
接口。每个工厂类根据业务需求,实现不同的生产逻辑。 -
定义委托
ProductionDelegate
,它应该与IProductionFactory
接口中的方法签名相匹配,这样委托就可以指向任何实现了这些方法的对象。 -
在
Main
函数中,创建不同工厂的实例,并将这些实例的引用赋值给ProductionDelegate
委托。通过调用委托来执行相应的生产方法。
2.难点:
- 确保接口
IProductionFactory
的设计是合理且符合需求的,接口中的方法应该能够涵盖所有工厂的生产能力。 - 在具体的工厂类中实现接口时,需要根据工厂的实际情况(比如武汉工厂能生产鸭脖和鸭翅,南京工厂只能生产鸭翅等)来实现接口方法。
- 委托
ProductionDelegate
的定义和使用要正确,它应该能够指向任何实现了IProductionFactory
接口的对象的方法,并能够正确地调用这些方法。
三.代码实现
1.定义生产接口
// 定义生产接口
public interface IProductionFactory
{
void ProduceDuckNeck();
void ProduceDuckWing();
}
2.定义武汉工厂
// 武汉工厂,能生产鸭脖和鸭翅
public class WuhanFactory : IProductionFactory
{
public void ProduceDuckNeck()
{
Console.WriteLine("武汉工厂生产鸭脖");
}
public void ProduceDuckWing()
{
Console.WriteLine("武汉工厂生产鸭翅");
}
}
3.定义南京工厂
// 南京工厂,只能生产鸭翅
public class NanjingFactory : IProductionFactory
{
public void ProduceDuckNeck()
{
throw new NotSupportedException("南京工厂不能生产鸭脖");
}
public void ProduceDuckWing()
{
Console.WriteLine("南京工厂生产鸭翅");
}
}
4.定义长沙工厂
// 长沙工厂,只能生产鸭脖
public class ChangshaFactory : IProductionFactory
{
public void ProduceDuckNeck()
{
Console.WriteLine("长沙工厂生产鸭脖");
}
public void ProduceDuckWing()
{
throw new NotSupportedException("长沙工厂不能生产鸭翅");
}
}
5.定义委托
// 定义生产委托
public delegate void ProductionDelegate();
6.定义主函数
6.1创建工厂实例
// 创建工厂实例
IProductionFactory wuhanFactory = new WuhanFactory();
IProductionFactory nanjingFactory = new NanjingFactory();
IProductionFactory changshaFactory = new ChangshaFactory();
6.2定义生产委托并指向工厂的生产方法
// 定义生产委托,并指向工厂的生产方法
ProductionDelegate produceDuckNeckDelegate = wuhanFactory.ProduceDuckNeck;
ProductionDelegate produceDuckWingDelegate = nanjingFactory.ProduceDuckWing;
6.3通过委托进行生产
// 通过委托进行生产
produceDuckNeckDelegate(); // 输出:武汉工厂生产鸭脖
produceDuckWingDelegate(); // 输出:南京工厂生产鸭翅
6.4更改委托指向,模拟长沙工厂生产鸭脖
// 更改委托指向,模拟长沙工厂生产鸭脖
produceDuckNeckDelegate = changshaFactory.ProduceDuckNeck;
produceDuckNeckDelegate(); // 输出:长沙工厂生产鸭脖
四.运行结果
五.总结
在这个案例中,我们通过c#设计了一套系统来实现对周黑鸭工厂产品生产的统一管理,其中涉及到定义接口、实现具体工厂类、使用委托以及各方法的协同工作。这个示例展示了如何使用接口、类和委托等关键知识点来实现一个简单但功能完备的产品生产管理系统。通过合理的设计和灵活的委托使用,我们可以轻松地管理不同工厂的生产能力,并实现生产操作的动态控制。
六.完整代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Program2
{
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("长沙工厂生产鸭脖");
}
public void ProduceDuckWing()
{
throw new NotSupportedException("长沙工厂不能生产鸭翅");
}
}
// 定义生产委托
public delegate void ProductionDelegate();
internal class Class1
{
static void Main(string[] args)
{
// 创建工厂实例
IProductionFactory wuhanFactory = new WuhanFactory();
IProductionFactory nanjingFactory = new NanjingFactory();
IProductionFactory changshaFactory = new ChangshaFactory();
// 定义生产委托,并指向工厂的生产方法
ProductionDelegate produceDuckNeckDelegate = wuhanFactory.ProduceDuckNeck;
ProductionDelegate produceDuckWingDelegate = nanjingFactory.ProduceDuckWing;
// 通过委托进行生产
produceDuckNeckDelegate(); // 输出:武汉工厂生产鸭脖
produceDuckWingDelegate(); // 输出:南京工厂生产鸭翅
// 更改委托指向,模拟长沙工厂生产鸭脖
produceDuckNeckDelegate = changshaFactory.ProduceDuckNeck;
produceDuckNeckDelegate(); // 输出:长沙工厂生产鸭脖
}
}
}