简单工厂模式(Simple Factory Pattern)属于创建型模式,它定义了一个创建对象的类,由这个类来封装实例化对象的行为。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常具有共同的父类。
一、简单工厂模式的结构
简单工厂模式主要包含以下角色:
- 工厂类(Creator):这是简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。
- 抽象产品类(Product):简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。
- 具体产品类(Concrete Product):简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。
二、简单工厂模式的实现
下面通过C#代码示例来演示简单工厂模式的实现:
(1) 定义抽象产品类
public interface IProduct
{
void Show();
}
(2) 定义具体产品类
public class ConcreteProductA : IProduct
{
public void Show()
{
Console.WriteLine("This is Product A");
}
}
public class ConcreteProductB : IProduct
{
public void Show()
{
Console.WriteLine("This is Product B");
}
}
(3) 定义工厂类
public class SimpleFactory
{
public static IProduct CreateProduct(string type)
{
switch (type)
{
case "A":
return new ConcreteProductA();
case "B":
return new ConcreteProductB();
default:
throw new ArgumentException("Unknown product type");
}
}
}
(4) 客户端代码
class Program
{
static void Main(string[] args)
{
IProduct productA = SimpleFactory.CreateProduct("A");
productA.Show();
IProduct productB = SimpleFactory.CreateProduct("B");
productB.Show();
}
}
三、简单工厂模式的优缺点
优点:
- 工厂类含有必要的判断逻辑,可以决定在什么时候创建哪一个产品类的实例,客户端可以免除直接创建产品对象的责任,而仅仅“消费”产品。简单工厂模式通过这种做法实现了对责任的分割。
- 客户端无须知道所创建的具体产品类的类名,只需要知道具体产品类所对应的参数即可。
- 通过引入配置文件,可以在不修改任何客户端代码的情况下更换和增加新的具体产品类,在一定程度上提高了系统的灵活性。
缺点:
- 由于工厂类集中了所有产品创建逻辑,一旦不能正常工作,整个系统都要受到影响。
- 使用简单工厂模式将会增加系统中类的个数,在一定程序上增加了系统的复杂度和理解难度。
- 系统扩展困难,一旦添加新产品就不得不修改工厂逻辑,在产品类型较多时,有可能造成工厂逻辑过于复杂,不利于系统的扩展和维护。
简单工厂模式作为一种简单且实用的创建型模式,在软件开发中得到了广泛的应用,特别是当系统中只需要一个工厂类或者系统中只需要创建少量对象时,使用简单工厂模式可以大大简化系统的实现,提高系统的可维护性和灵活性。