工厂模式适用场景
- 对象创建逻辑复杂:当创建对象需要复杂的初始化步骤、涉及多个条件判断或依赖其他对象的创建时,使用工厂模式可以将这些复杂逻辑封装在工厂类中,使客户端代码更加简洁。例如,创建数据库连接对象,需要根据不同的数据库类型(如 MySQL、SQL Server 等)加载不同的驱动、设置不同的连接字符串等复杂操作。
- 根据不同条件创建不同类型对象:在程序运行时根据不同的条件(如配置文件、用户输入、运行环境等)决定创建哪种具体类型的对象。比如一个图形绘制系统,根据用户选择的图形类型(圆形、矩形、三角形等)创建相应的图形对象。
- 解耦对象创建和使用:通过将对象创建的职责交给工厂类,使得使用对象的代码与对象创建的具体实现分离,提高代码的可维护性和可扩展性。例如,在一个大型游戏开发中,游戏角色的创建涉及到很多资源加载和初始化工作,将角色创建逻辑放在工厂类中,游戏中其他模块只需要从工厂获取角色对象,而不需要关心具体的创建过程。
C#代码实现简单工厂模式创建图形对象
- 定义图形接口
public interface IShape
{
void Draw();
}
- 实现具体图形类
public class Circle : IShape
{
public void Draw()
{
Console.WriteLine("绘制圆形");
}
}
public class Rectangle : IShape
{
public void Draw()
{
Console.WriteLine("绘制矩形");
}
}
- 创建工厂类
public class ShapeFactory
{
public IShape CreateShape(string shapeType)
{
if (shapeType.Equals("Circle", StringComparison.OrdinalIgnoreCase))
{
return new Circle();
}
else if (shapeType.Equals("Rectangle", StringComparison.OrdinalIgnoreCase))
{
return new Rectangle();
}
return null;
}
}
- 使用工厂创建图形对象
class Program
{
static void Main()
{
ShapeFactory factory = new ShapeFactory();
IShape circle = factory.CreateShape("Circle");
if (circle != null)
{
circle.Draw();
}
IShape rectangle = factory.CreateShape("Rectangle");
if (rectangle != null)
{
rectangle.Draw();
}
}
}