一.代码实现的要求:
使用 C# 编码(涉及类、接口、委托等关键知识点),实现对周黑鸭工厂的产品生产统一管理,主要产品包括鸭脖和鸭翅。武汉工厂能生生产鸭脖和鸭翅,南京工厂只能生产鸭翅,长沙工厂只能生产鸭脖。具体要求如下:
定义接口 IProductionFactory,包含生产鸭脖和鸭翅的方法。
定义类 WuhanFactory、NanjingFactory、ChangshaFactory 分别实现接口 IProductionFactory,用于具体的生产工厂。
使用委托 ProductionDelegate 定义生产委托。
在 Main 函数中,创建不同工厂的实例,并通过生产委托进行生产。
二.代码示例
1.代码部分讲解在代码上展示
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
// 定义生产委托
public delegate void ProductionDelegate();
// 定义接口 IProductionFactory
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()
{
// 南京工厂不生产鸭脖
Console.WriteLine("南京工厂不生产鸭脖。");
}
public void ProduceDuckWing()
{
Console.WriteLine("南京工厂生产鸭翅。");
}
}
// 长沙工厂实现 IProductionFactory
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 productionDelegate;
// 武汉工厂生产鸭脖和鸭翅
Console.WriteLine("武汉工厂产品:");
productionDelegate = wuhanFactory.ProduceDuckNeck;
productionDelegate += wuhanFactory.ProduceDuckWing;
productionDelegate();
Console.WriteLine();
// 南京工厂只生产鸭翅
Console.WriteLine("南京工厂产品:");
productionDelegate = nanjingFactory.ProduceDuckNeck; // 不会有输出
productionDelegate += nanjingFactory.ProduceDuckWing;
productionDelegate();
Console.WriteLine();
// 长沙工厂只生产鸭脖
Console.WriteLine("长沙工厂产品:");
productionDelegate = changshaFactory.ProduceDuckNeck;
productionDelegate += changshaFactory.ProduceDuckWing; // 不会有输出
productionDelegate();
}
}
2.代码详细讲解
// 定义生产委托
public delegate void ProductionDelegate();
定义一个委托方便后续操作
// 定义接口 IProductionFactory
public interface IProductionFactory
{
void ProduceDuckNeck();
void ProduceDuckWing();
}
定义接口“IProductionFactory”
// 武汉工厂实现 IProductionFactory
public class WuhanFactory : IProductionFactory
{
public void ProduceDuckNeck()
{
Console.WriteLine("武汉工厂生产鸭脖。");
}
public void ProduceDuckWing()
{
Console.WriteLine("武汉工厂生产鸭翅。");
}
}
武汉的工厂定义为WuhanFactory的类,该类实现了 IProductionFactory
接口
// 南京工厂实现 IProductionFactory
public class NanjingFactory : IProductionFactory
{
public void ProduceDuckNeck()
{
// 南京工厂不生产鸭脖
Console.WriteLine("南京工厂不生产鸭脖。");
}
public void ProduceDuckWing()
{
Console.WriteLine("南京工厂生产鸭翅。");
}
}
南京工厂定义为NanjingFactory的类,也实现了 IProductionFactory接口,并且标识出南京工厂不生产鸭脖
// 长沙工厂实现 IProductionFactory
public class ChangshaFactory : IProductionFactory
{
public void ProduceDuckNeck()
{
Console.WriteLine("长沙工厂生产鸭脖。");
}
public void ProduceDuckWing()
{
// 长沙工厂不生产鸭翅
Console.WriteLine("长沙工厂不生产鸭翅。");
}
}
长沙工厂定义为ChangshaFactory,实现IProductionFactory接口,长沙工厂不生产鸭翅
class Program
{
static void Main(string[] args)
{
// 创建不同工厂的实例
WuhanFactory wuhanFactory = new WuhanFactory();
NanjingFactory nanjingFactory = new NanjingFactory();
ChangshaFactory changshaFactory = new ChangshaFactory();
// 生产委托示例
ProductionDelegate productionDelegate;
// 武汉工厂生产鸭脖和鸭翅
Console.WriteLine("武汉工厂产品:");
productionDelegate = wuhanFactory.ProduceDuckNeck;
productionDelegate += wuhanFactory.ProduceDuckWing;
productionDelegate();
Console.WriteLine();
// 南京工厂只生产鸭翅
Console.WriteLine("南京工厂产品:");
productionDelegate = nanjingFactory.ProduceDuckNeck; // 不会有输出
productionDelegate += nanjingFactory.ProduceDuckWing;
productionDelegate();
Console.WriteLine();
// 长沙工厂只生产鸭脖
Console.WriteLine("长沙工厂产品:");
productionDelegate = changshaFactory.ProduceDuckNeck;
productionDelegate += changshaFactory.ProduceDuckWing; // 不会有输出
productionDelegate();
}
}
对于武汉工厂,首先将 productionDelegate 委托实例指向 wuhanFactory.ProduceDuckNeck 方法,然后使用 += 操作符将其指向 wuhanFactory.ProduceDuckWing 方法。最后,调用 productionDelegate() 来执行这两个方法,从而生产鸭脖和鸭翅。
对于南京工厂,由于南京工厂只生产鸭翅,因此将 productionDelegate 委托实例只指向了 nanjingFactory.ProduceDuckWing 方法。然后调用 productionDelegate() 执行该方法,但由于没有指向生产鸭脖的方法,所以没有输出。
对于长沙工厂,类似地,只有生产鸭脖的方法被指向,并且没有生产鸭翅的方法被指向。因此,调用 productionDelegate() 只会执行生产鸭脖的方法,而不会有输出。
三.代码运行示例
四.代码讲解
使用接口 IProductionFactory
定义了工厂的生产行为,包括生产鸭脖和鸭翅的方法。
分别实现了三个工厂类 WuhanFactory
、NanjingFactory
和 ChangshaFactory
,它们都实现了接口 IProductionFactory
中定义的方法。
在 `Main` 函数中,首先创建了三个不同工厂的实例。然后通过委托 `ProductionDelegate` 分别指定了不同工厂的生产方法。最后调用委托,触发了工厂的生产过程,输出了生产结果。
五.代码主要思路
主要思路是通过定义一个接口 IProductionFactory 来规范工厂的生产行为,包括生产鸭脖和鸭翅的方法这样可以使得不同的工厂类都实现了相同的接口,让代码的可拓展性提高
还需要在 Main
函数中创建不同工厂的实例,并通过委托来指定工厂的生产方法。这样可以实现对产品生产过程的统一管理和调用。
六.代码的一些难点所在
本代码的编写过程需要使用委托的基本思路,它能将方法作为一种参数去传递给各种方法,但是当工厂的结构多起来之后,委托的结构必须要谨慎设计,这使得这个代码的设计难度有些上升。
作为一个周黑鸭工厂生产的代码,应该考虑到后续更多地区代码加入进来的可能性,这使得设计的代码需要有一定的灵活性和可拓展性,以此来更方便的添加或删除代码。ss