我们使用进行 C# 编码,实现对周黑鸭工厂的产品生产统一管理,主要产品包括鸭脖和鸭翅。武汉工厂能生生产鸭脖和鸭翅,南京工厂只能生产鸭翅,长沙工厂只能生产鸭脖。
从上面的需求来看,我们定义 IProductionFactory接口,这个接口要包含生产鸭脖和鸭翅的方法。再定义相关类用于对接口的实现。
接下来我们一步一步去实现:
1.接口 IProductionFactory
:
这个接口定义了两个方法 ProduceDuckNeck()
和 ProduceDuckWing()
,用来表示工厂能够生产的产品。所有工厂类都需要实现这个接口,并提供这两个方法的具体实现。
public interface IProductionFactory
{
void ProduceDuckNeck();
void ProduceDuckWing();
}
2.具体工厂类
WuhanFactory
、NanjingFactory
和 ChangshaFactory
分别实现了接口 IProductionFactory
。每个工厂类都提供了对应产品的生产方法的具体实现。例如,WuhanFactory
实现了生产鸭脖和鸭翅的方法,而 NanjingFactory
只实现了生产鸭翅的方法,ChangshaFactory
只实现了生产鸭脖的方法。
3.委托 ProductionDelegate
:
这是一个委托类型,用于表示生产的委托。它可以引用一个或多个具有相同签名的方法。在这个示例中,ProductionDelegate
委托可以引用生产鸭脖或鸭翅的方法。
public delegate void ProductionDelegate();
4.Main 函数:
- 在
Main
函数中,首先创建了三个不同工厂的实例:WuhanFactory
、NanjingFactory
和ChangshaFactory
。 - 然后定义了
ProductionDelegate
委托对象,用于调用不同工厂的生产方法。 - 对于每个工厂,将相应的生产方法添加到委托中,然后调用委托的
Invoke
方法来执行所有添加的方法。 - 最后输出了每个工厂生产的产品情况。
class Program
{
static void Main(string[] args)
{
// 创建不同工厂的实例
WuhanFactory wuhanFactory = new WuhanFactory();
NanjingFactory nanjingFactory = new NanjingFactory();
ChangshaFactory changshaFactory = new ChangshaFactory();
// 生产委托
ProductionDelegate productionDelegate;
// Wuhan Factory can produce both Duck Neck and Duck Wing
productionDelegate = wuhanFactory.ProduceDuckNeck;
productionDelegate += wuhanFactory.ProduceDuckWing;
Console.WriteLine("Producing at Wuhan Factory:");
productionDelegate.Invoke();
Console.WriteLine();
// Nanjing Factory can only produce Duck Wing
productionDelegate = nanjingFactory.ProduceDuckNeck;
productionDelegate += nanjingFactory.ProduceDuckWing;
Console.WriteLine("Producing at Nanjing Factory:");
productionDelegate.Invoke();
Console.WriteLine();
// Changsha Factory can only produce Duck Neck
productionDelegate = changshaFactory.ProduceDuckNeck;
productionDelegate += changshaFactory.ProduceDuckWing;
Console.WriteLine("Producing at Changsha Factory:");
productionDelegate.Invoke();
}
}
到这里我们就完成了一个大体的流程,接下来我们跑一下看看结果。