此题要求我们利用C#对周黑鸭工厂实现统一管理,要求武汉工厂能生生产鸭脖和鸭翅,南京工厂只能生产鸭翅,长沙工厂只能生产鸭脖。主要利用类,接口,委托实现。
以下是创建委托,定义接口,以及定义各地工厂的类,在各个工厂的类中根据要求的不同对接口中生产鸭脖,鸭翅的功能进行复写。
首先,我们先定义一个生产委托
delegate void ProductionDelegate();// 定义生产委托
定义完这个委托后,在后面的主函数中各个工厂生产鸭脖,鸭翅将作为事件添加到这个委托里,然后直接调用这个委托就能实现各个工厂生产。
接下来,我们将定义生产鸭脖,鸭翅的接口:
// 定义接口 IProductionFactory
interface IProductionFactory
{
void ProduceDuckNeck();// 生产鸭脖
void ProduceDuckWing();// 生产鸭翅
}
定义完接口后,我们后面会对每一个工厂创建一个类,每一个类都将调用这个接口实现生产功能,并且根据每个工厂的对应的要求在其类中对这两个函数进行复写,拿武汉工厂的例子来说,以下是武汉工厂的定义:
class WuhanFactory : IProductionFactory//传入接口
{
public void ProduceDuckNeck()
{
// 对生产鸭脖进行复写,武汉可以生产鸭脖
Console.WriteLine("Wuhan Factory is producing Duck Neck.");
}
public void ProduceDuckWing()
{
// 对生产鸭翅进行复写,武汉可以生产鸭翅
Console.WriteLine("Wuhan Factory is producing Duck Wing.");
}
}
以下是总的对所有工厂类的定义,接口,委托的函数:
internal class Program
{
delegate void ProductionDelegate();// 定义生产委托
// 定义接口 IProductionFactory
interface IProductionFactory
{
void ProduceDuckNeck();// 生产鸭脖
void ProduceDuckWing();// 生产鸭翅
}
// 实现武汉工厂
class WuhanFactory : IProductionFactory
{
public void ProduceDuckNeck()
{
// 对生产鸭脖进行复写,武汉可以生产鸭脖
Console.WriteLine("Wuhan Factory is producing Duck Neck.");
}
public void ProduceDuckWing()
{
// 对生产鸭翅进行复写,武汉可以生产鸭翅
Console.WriteLine("Wuhan Factory is producing Duck Wing.");
}
}
// 实现南京工厂
class NanjingFactory : IProductionFactory
{
public void ProduceDuckNeck()
{
// 对生产鸭脖进行复写,南京不可以生产鸭脖
Console.WriteLine("Nanjing Factory cannot produce Duck Neck.");
}
public void ProduceDuckWing()
{
// 对生产鸭翅进行复写,南京可以生产鸭翅
Console.WriteLine("Nanjing Factory is producing Duck Wing.");
}
}
// 实现长沙工厂
class ChangshaFactory : IProductionFactory
{
public void ProduceDuckNeck()
{
// 对生产鸭脖进行复写,长沙可以生产鸭脖
Console.WriteLine("Changsha Factory is producing Duck Neck.");
}
public void ProduceDuckWing()
{
// 对生产鸭翅进行复写,长沙不可以生产鸭翅
Console.WriteLine("Changsha Factory cannot produce Duck Wing.");
}
}
接下来将在主函数中创建对象(也就是各个工厂的实例),并且将各个工厂的生产方法加入到委托中,调用委托实现生产,并且对各个工厂进行统一管理,首先是创建工厂的对象,利用new来创建:
// 创建不同工厂的实例
WuhanFactory wuhanFactory = new WuhanFactory();
NanjingFactory nanjingFactory = new NanjingFactory();
ChangshaFactory changshaFactory = new ChangshaFactory();
然后是将武汉工厂的生产任务加到委托里,并调用委托:
// 使用生产委托进行生产
ProductionDelegate productionDelegate;
// 武汉工厂生产
productionDelegate = wuhanFactory.ProduceDuckNeck;//将委托定义成武汉工厂生产鸭脖
productionDelegate += wuhanFactory.ProduceDuckWing;//委托中还要加入武汉工厂生产鸭翅
productionDelegate();//执行委托
每次调用一个工厂的生产前将委托重置一下,就是productionDelegate=工厂名.ProduceDuckNeck,重置成每个工厂生产鸭脖的任务,然后在委托中再加上这个工厂生产鸭翅的任务,最后将所有的步骤整合一下,下面是总代码:
static void Main(string[] args)
{
// 创建不同工厂的实例
WuhanFactory wuhanFactory = new WuhanFactory();
NanjingFactory nanjingFactory = new NanjingFactory();
ChangshaFactory changshaFactory = new ChangshaFactory();
// 使用生产委托进行生产
ProductionDelegate productionDelegate;
// 武汉工厂生产
productionDelegate = wuhanFactory.ProduceDuckNeck;//将委托定义成武汉工厂生产鸭脖
productionDelegate += wuhanFactory.ProduceDuckWing;//委托中还要加入武汉工厂生产鸭翅
productionDelegate();//执行委托
Console.WriteLine();
// 南京工厂生产
productionDelegate = nanjingFactory.ProduceDuckNeck;//将委托定义成南京工厂生产鸭脖
productionDelegate += nanjingFactory.ProduceDuckWing;//委托中还要加入南京工厂生产鸭翅
productionDelegate();//执行委托
Console.WriteLine();
// 长沙工厂生产
productionDelegate = changshaFactory.ProduceDuckNeck;//将委托定义成长沙工厂生产鸭脖
productionDelegate += changshaFactory.ProduceDuckWing;//委托中还要加入长沙工厂生产鸭翅
productionDelegate();//执行委托
}
本篇主要通过一个周黑鸭工厂的例子展示了委托,接口的基本用法,接口的好处就是同一个接口,在不同的类入口中实现的功能不一样,不用再在每一个类中重新定义函数。
委托可以动态的添加方法,在此题中就是各个工厂生产鸭翅,鸭脖,使执行更加方便,快捷,通过委托能够非常方便,快捷地实现对各个工厂生产的管理。