MST

星途 面试题库

面试题:C#中工厂模式在架构中的应用场景

请阐述在C#开发的架构中,工厂模式通常会在哪些场景下被应用?并举例说明如何在C#代码中实现一个简单的工厂模式,用于创建不同类型的图形(如圆形、矩形)对象。
10.9万 热度难度
编程语言C#

知识考点

AI 面试

面试题答案

一键面试

工厂模式适用场景

  1. 对象创建逻辑复杂:当创建对象需要复杂的初始化步骤、涉及多个条件判断或依赖其他对象的创建时,使用工厂模式可以将这些复杂逻辑封装在工厂类中,使客户端代码更加简洁。例如,创建数据库连接对象,需要根据不同的数据库类型(如 MySQL、SQL Server 等)加载不同的驱动、设置不同的连接字符串等复杂操作。
  2. 根据不同条件创建不同类型对象:在程序运行时根据不同的条件(如配置文件、用户输入、运行环境等)决定创建哪种具体类型的对象。比如一个图形绘制系统,根据用户选择的图形类型(圆形、矩形、三角形等)创建相应的图形对象。
  3. 解耦对象创建和使用:通过将对象创建的职责交给工厂类,使得使用对象的代码与对象创建的具体实现分离,提高代码的可维护性和可扩展性。例如,在一个大型游戏开发中,游戏角色的创建涉及到很多资源加载和初始化工作,将角色创建逻辑放在工厂类中,游戏中其他模块只需要从工厂获取角色对象,而不需要关心具体的创建过程。

C#代码实现简单工厂模式创建图形对象

  1. 定义图形接口
public interface IShape
{
    void Draw();
}
  1. 实现具体图形类
  • 圆形
public class Circle : IShape
{
    public void Draw()
    {
        Console.WriteLine("绘制圆形");
    }
}
  • 矩形
public class Rectangle : IShape
{
    public void Draw()
    {
        Console.WriteLine("绘制矩形");
    }
}
  1. 创建工厂类
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;
    }
}
  1. 使用工厂创建图形对象
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();
        }
    }
}