简单工厂模式(Simple Factory Pattern)是一种创建型设计模式,它提供了一种创建对象的最佳方式。在简单工厂模式中,我们创建一个工厂类,这个类用于根据传入的信息动态决定应该创建哪一个类的实例。
以下是一个C#实现的简单工厂模式的例子。在这个例子中,我们将创建一个形状工厂,它能够基于传入的类型信息来创建不同类型的形状对象(如圆形、矩形等)。
首先,定义一个形状接口 IShape
:
csharp
public interface IShape
{
void Draw();
}
然后,创建实现该接口的具体类,例如 Circle
和 Rectangle
:
csharp
public class Circle : IShape
{
public void Draw()
{
Console.WriteLine("Inside Circle::draw() method.");
}
}
public class Rectangle : IShape
{
public void Draw()
{
Console.WriteLine("Inside Rectangle::draw() method.");
}
}
接下来,创建简单工厂类 ShapeFactory
,该类将包含静态方法来生成基于给定信息的形状对象:
csharp
public class ShapeFactory
{
// 使用 getShape 方法获取形状类型的对象
public static IShape GetShape(string shapeType)
{
if (shapeType == null)
{
return null;
}
if (shapeType.ToLower() == "circle")
{
return new Circle();
}
else if (shapeType.ToLower() == "rectangle")
{
return new Rectangle();
}
// 可以使用异常处理或返回 null
throw new InvalidOperationException("Invalid shape type");
}
}
最后,使用 ShapeFactory
来获取形状对象,并调用其 Draw
方法:
csharp
class Program
{
static void Main(string[] args)
{
IShape shape1 = ShapeFactory.GetShape("CIRCLE");
shape1.Draw();
IShape shape2 = ShapeFactory.GetShape("RECTANGLE");
shape2.Draw();
// 尝试获取一个不支持的形状类型
try
{
IShape shape3 = ShapeFactory.GetShape("TRIANGLE");
}
catch (InvalidOperationException ex)
{
Console.WriteLine(ex.Message);
}
Console.ReadKey();
}
}
在这个例子中,ShapeFactory 类是一个简单工厂,它根据传入的字符串来决定创建哪个形状对象。注意,简单工厂模式的一个主要缺点是,每当有新的形状类被添加到系统中时,ShapeFactory 类也需要被修改,这违反了开闭原则(对扩展开放,对修改关闭)。因此,在更复杂的系统中,可能会考虑使用其他设计模式(如工厂方法模式或抽象工厂模式)来替代简单工厂模式。