三个工厂,一个工厂生产鸭脖鸭翅,一个工厂生产鸭脖,一个工厂生产鸭翅,使用工厂模式实现
时间: 2024-09-13 22:09:45 浏览: 13
在使用工厂模式实现这种场景时,我们可以创建一系列专门负责生产相应部分的工厂,并将它们封装在一个高层工厂中,以实现对具体产品(如鸭脖、鸭翅)的抽象。这里是一个简单的C#示例:
首先,定义一个产品接口 `IProduct` 和两个具体的产品类 `DuckBeak` 和 `DuckWing`:
```csharp
public interface IProduct
{
string Name { get; }
}
public class DuckBeak : IProduct
{
public string Name => "Duck Beak";
}
public class DuckWing : IProduct
{
public string Name => "Duck Wing";
}
```
接着,分别创建对应产品的工厂类:
```csharp
public class DuckBeakFactory
{
public IProduct Produce()
{
return new DuckBeak();
}
}
public class DuckWingFactory
{
public IProduct Produce()
{
return new DuckWing();
}
}
```
最后,创建一个高层的 `AbstractFactory` 或者 `ProductFactory` 来管理这些具体工厂:
```csharp
public abstract class AbstractFactory
{
protected virtual IProduct ProduceBeak() => throw new NotImplementedException();
protected virtual IProduct ProduceWing() => throw new NotImplementedException();
public IProduct GetDuckBeak()
{
return ProduceBeak();
}
public IProduct GetDuckWing()
{
return ProduceWing();
}
}
public class DuckProductsFactory : AbstractFactory
{
private readonly DuckBeakFactory _duckBeakFactory;
private readonly DuckWingFactory _duckWingFactory;
public DuckProductsFactory()
{
_duckBeakFactory = new DuckBeakFactory();
_duckWingFactory = new DuckWingFactory();
}
protected override IProduct ProduceBeak()
{
return _duckBeakFactory.Produce();
}
protected override IProduct ProduceWing()
{
return _duckWingFactory.Produce();
}
}
```
在主函数中,你可以这样使用工厂模式来获取鸭脖或鸭翅:
```csharp
public static void Main()
{
DuckProductsFactory factory = new DuckProductsFactory();
IProduct duckBeak = factory.GetDuckBeak();
IProduct duckWing = factory.GetDuckWing();
Console.WriteLine(duckBeak.Name); // 输出:Duck Beak
Console.WriteLine(duckWing.Name); // 输出:Duck Wing
}
```