目录
1、作业内容
使用 C# 编码(涉及类、接口、委托等关键知识点),实现对周黑鸭工厂的产品生产统一管理,主要产品包括鸭脖和鸭翅。武汉工厂能生生产鸭脖和鸭翅,南京工厂只能生产鸭翅,长沙工厂只能生产鸭脖。具体要求如下:
- 定义接口 IProductionFactory,包含生产鸭脖和鸭翅的方法。
- 定义类 WuhanFactory、NanjingFactory、ChangshaFactory 分别实现接口 IProductionFactory,用于具体的生产工厂。
- 使用委托 ProductionDelegate 定义生产委托。
- 在 Main 函数中,创建不同工厂的实例,并通过生产委托进行生产。
2、作业要求
- 请以博客方式提交作业,博客内容需要对代码行进行讲解,阐述设计的主要思路与难点。请注意,如果想达到博客网站如csdn的优质博文的质量分,需要对博客进行详细描述。
- 提交方式为提交博客发布地址,并附上本博文的质量分。
3、主要思路
(1)定义接口
创建一个IProductionFactory接口,其中包含了生产鸭脖和鸭翅的方法声明。
// 定义接口 IProductionFactory
public interface IProductionFactory
{
void ProduceDuckNeck();
void ProduceDuckWing();
}
(2)用类实现接口
分别创建三个具体的工厂类:WuhanFactory、NanjingFactory和ChangshaFactory,它们分别实现了IProductionFactory接口。每个工厂类代表了不同城市的工厂,具体实现了鸭脖和鸭翅的生产方法。
// 定义类 WuhanFactory 实现接口 IProductionFactory
public class WuhanFactory : IProductionFactory
{
public void ProduceDuckNeck()
{
Console.WriteLine("Wuhan factory produces duck neck.");
}
public void ProduceDuckWing()
{
Console.WriteLine("Wuhan factory produces duck wing.");
}
}
// 定义类 NanjingFactory 实现接口 IProductionFactory
public class NanjingFactory : IProductionFactory
{
public void ProduceDuckNeck()
{
// 南京工厂不能生产鸭脖
Console.WriteLine("Nanjing factory cannot produce duck neck.");
}
public void ProduceDuckWing()
{
Console.WriteLine("Nanjing factory produces duck wing.");
}
}
// 定义类 ChangshaFactory 实现接口 IProductionFactory
public class ChangshaFactory : IProductionFactory
{
public void ProduceDuckNeck()
{
Console.WriteLine("Changsha factory produces duck neck.");
}
public void ProduceDuckWing()
{
// 长沙工厂不能生产鸭翅
Console.WriteLine("Changsha factory cannot produce duck wing.");
}
}
(3)声明委托
声明一个委托用于各工厂具体生产的统一管理。
// 声明委托类型
public delegate void ProductionDelegate();
(4)创建委托实例并绑定方法以进行生产
在Main函数中,分别创建三个工厂的委托实例,然后将对应工厂类的生产方法绑定到委托实例上。接着就可以通过委托进行生产了。
class Program
{
static void Main(string[] args)
{
// 创建不同工厂的实例
WuhanFactory wuhanFactory = new WuhanFactory();
NanjingFactory nanjingFactory = new NanjingFactory();
ChangshaFactory changshaFactory = new ChangshaFactory();
// 创建并绑定生产委托
ProductionDelegate wuhanDelegate = new ProductionDelegate(wuhanFactory.ProduceDuckNeck);
wuhanDelegate += wuhanFactory.ProduceDuckWing;
ProductionDelegate nanjingDelegate = new ProductionDelegate(nanjingFactory.ProduceDuckWing);
ProductionDelegate changshaDelegate = new ProductionDelegate(changshaFactory.ProduceDuckNeck);
// 通过生产委托进行生产
Console.WriteLine("Production in Wuhan:");
wuhanDelegate();
Console.WriteLine("\nProduction in Nanjing:");
nanjingDelegate();
Console.WriteLine("\nProduction in Changsha:");
changshaDelegate();
}
}
4、难点分析
(1)接口的使用
对于武汉工厂能生生产鸭脖和鸭翅,南京工厂只能生产鸭翅,长沙工厂只能生产鸭脖这一要求,我们可以使用接口来实现,因为接口提供了一种标准化的方式来表示类之间的联系,同时实现了多态,使得代码更加的灵活和可拓展。
(2)委托的使用
使用委托,我们可以实现工厂产品生产的统一管理,而无需调用每个工厂类的方法,这增强了代码的简洁性和可读性。同时,委托还提高了代码的可拓展性和可维护性,使得在未来的需求变更或新增功能时更容易进行修改和扩展。因此,结合作业的需求,使用委托是一种合适的选择,能够有效地管理工厂产品生产的任务。
5、代码实现
using System;
// 定义接口 IProductionFactory
public interface IProductionFactory
{
void ProduceDuckNeck();
void ProduceDuckWing();
}
// 定义委托 ProductionDelegate
public delegate void ProductionDelegate();
// 定义类 WuhanFactory 实现接口 IProductionFactory
public class WuhanFactory : IProductionFactory
{
public void ProduceDuckNeck()
{
Console.WriteLine("Wuhan factory produces duck neck.");
}
public void ProduceDuckWing()
{
Console.WriteLine("Wuhan factory produces duck wing.");
}
}
// 定义类 NanjingFactory 实现接口 IProductionFactory
public class NanjingFactory : IProductionFactory
{
public void ProduceDuckNeck()
{
// 南京工厂不能生产鸭脖
Console.WriteLine("Nanjing factory cannot produce duck neck.");
}
public void ProduceDuckWing()
{
Console.WriteLine("Nanjing factory produces duck wing.");
}
}
// 定义类 ChangshaFactory 实现接口 IProductionFactory
public class ChangshaFactory : IProductionFactory
{
public void ProduceDuckNeck()
{
Console.WriteLine("Changsha factory produces duck neck.");
}
public void ProduceDuckWing()
{
// 长沙工厂不能生产鸭翅
Console.WriteLine("Changsha factory cannot produce duck wing.");
}
}
class Program
{
static void Main(string[] args)
{
// 创建不同工厂的实例
WuhanFactory wuhanFactory = new WuhanFactory();
NanjingFactory nanjingFactory = new NanjingFactory();
ChangshaFactory changshaFactory = new ChangshaFactory();
// 创建生产委托
ProductionDelegate wuhanDelegate = new ProductionDelegate(wuhanFactory.ProduceDuckNeck);
wuhanDelegate += wuhanFactory.ProduceDuckWing;
ProductionDelegate nanjingDelegate = new ProductionDelegate(nanjingFactory.ProduceDuckWing);
ProductionDelegate changshaDelegate = new ProductionDelegate(changshaFactory.ProduceDuckNeck);
// 通过生产委托进行生产
Console.WriteLine("Production in Wuhan:");
wuhanDelegate();
Console.WriteLine("\nProduction in Nanjing:");
nanjingDelegate();
Console.WriteLine("\nProduction in Changsha:");
changshaDelegate();
}
}