C#面试题更新 2026-08-05

请解释C#中工厂方法模式与抽象工厂模式各自的作用,并说明在具体实现时二者在类结构上有什么不同?

技术原理方案权衡C#

考察说明

考查对两种创建型设计模式的理解及C#中的实现能力。

回答思路

  1. 【回答框架 1】工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类。其核心是让类的实例化延迟到子类。在C#中,通常定义一个抽象工厂类或接口,其中包含一个抽象的工厂方法(如CreateProduct),子类实现该方法以返回具体产品。
  2. 【回答框架 2】抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,而无需指定具体类。它由多个工厂方法组成,每个方法负责创建一个产品类型。在C#中,定义抽象工厂接口,包含多个创建方法(如CreateProductA、CreateProductB),具体工厂实现这些方法以返回不同的产品族。
  3. 【回答框架 3】两者的关键差异:工厂方法模式只涉及一个产品等级结构,通过继承来扩展;抽象工厂模式涉及多个产品等级结构,通过组合(工厂对象)来创建产品族。在C#中,工厂方法使用虚方法或抽象方法,而抽象工厂使用接口或抽象类定义多个方法。
  4. 【关键点 1】工厂方法将实例化逻辑延迟到子类,抽象工厂用于创建产品族。
  5. 【关键点 2】工厂方法模式适合产品类型单一且可扩展的场景,抽象工厂适合需要保证产品兼容性的场景。
  6. 【关键点 3】C#中两者都可用接口、抽象类配合泛型实现。
  7. 【易错点 1】不要混淆工厂方法中的工厂类与抽象工厂中的工厂接口,前者是继承体系,后者是组合体系。
  8. 【易错点 2】抽象工厂模式增加新产品类型时需修改抽象工厂接口,违反了开闭原则,需要权衡。