C#实现简单工厂模式
简单工厂模式是一种创建模式,它提供了一种创建对象的最佳方式,即抽象工厂角色生成具体的对象。
在实现C#的简单工厂模式时,需要定义一个抽象产品和多个具体产品类,再设计一个工厂类用于创建各个具体产品。
以下是实现C#的简单工厂模式的完整攻略:
第一步:定义抽象产品
抽象产品是被所创建对象所继承的基类或接口。在这里我们定义了一个抽象类 Fruit
,用来作为所有水果类的基类:
public abstract class Fruit
{
public abstract string GetName();
}
第二步:创建具体产品
根据抽象产品的定义,我们实现两个具体的水果类 Orange
和 Banana
:
public class Orange : Fruit
{
public override string GetName()
{
return "Orange";
}
}
public class Banana : Fruit
{
public override string GetName()
{
return "Banana";
}
}
第三步:创建工厂类
工厂类是用于创建具体产品的类。在这里我们定义了一个简单的工厂类 FruitFactory
,用于根据传入的参数创建对应的具体产品:
public static class FruitFactory
{
public static Fruit CreateFruit(string fruitName)
{
switch (fruitName)
{
case "orange":
return new Orange();
case "banana":
return new Banana();
default:
throw new ArgumentException("Invalid fruit name.");
}
}
}
第四步:使用工厂类创建具体产品
现在我们可以使用工厂类 FruitFactory
来创建具体的水果类实例了:
var orange = FruitFactory.CreateFruit("orange");
var banana = FruitFactory.CreateFruit("banana");
Console.WriteLine(orange.GetName()); // 输出:"Orange"
Console.WriteLine(banana.GetName()); // 输出:"Banana"
以上代码中,我们通过传入不同的参数值来创建不同的水果实例,然后调用它们的 GetName()
方法获取水果的名称。
示例一:通过字符串创建具体类实例
假设我们有一个菜单系统,需要根据用户选择的水果名称字符串来创建对应的具体类实例。我们可以使用上述实现创建一个 FruitMenu
类:
public class FruitMenu
{
private readonly List<Fruit> _fruits;
public FruitMenu(string[] fruitNames)
{
_fruits = new List<Fruit>();
foreach (var name in fruitNames)
{
_fruits.Add(FruitFactory.CreateFruit(name));
}
}
public void PrintMenu()
{
Console.WriteLine("Fruit Menu:");
foreach (var fruit in _fruits)
{
Console.WriteLine(fruit.GetName());
}
}
}
通过传入一个水果名称字符串数组,FruitMenu
类在构造函数中调用 FruitFactory.CreateFruit()
方法创建各个具体水果实例,并将它们添加到 _fruits
列表中。然后可以通过 PrintMenu()
方法将菜单输出到控制台上。
下面是一个使用 FruitMenu
类的示例:
var fruitMenu = new FruitMenu(new string[] {"orange", "banana", "orange"});
fruitMenu.PrintMenu();
示例二:通过枚举类型创建具体类实例
除了通过字符串类型来创建具体类实例之外,我们还可以使用枚举类型来指定要创建的具体类实例。
假设我们需要实现一个贩卖机系统,用户可以通过按下相应按钮来购买特定的水果。我们可以定义一个 FruitType
枚举类型,并创建一个 VendingMachine
类来实现这个系统:
public enum FruitType
{
Orange,
Banana
}
public class VendingMachine
{
public Fruit Purchase(FruitType fruitType)
{
switch (fruitType)
{
case FruitType.Orange:
return FruitFactory.CreateFruit("orange");
case FruitType.Banana:
return FruitFactory.CreateFruit("banana");
default:
throw new ArgumentException("Invalid fruit type.");
}
}
}
在 Purchase()
方法中,我们可以通过传入 FruitType
枚举类型来获取用户想要购买的具体水果实例。然后通过调用 FruitFactory.CreateFruit()
方法来创建对应的具体类实例。
下面是一个使用 VendingMachine
类的示例:
var vendingMachine = new VendingMachine();
var orange = vendingMachine.Purchase(FruitType.Orange);
var banana = vendingMachine.Purchase(FruitType.Banana);
Console.WriteLine(orange.GetName());
Console.WriteLine(banana.GetName());
总结
上述攻略中,我们通过定义抽象产品、创建具体产品和设计工厂类的方式实现了C#的简单工厂模式,并提供了两个示例说明如何通过字符串和枚举类型来创建具体类实例。通过使用简单工厂模式,我们可以实现对象的更好重用性和可维护性。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#实现简单工厂模式 - Python技术站