简单工厂和工厂方法模式在实际应用中有何不同?请举例说明。

简单工厂和工厂方法是两种常用的创建型设计模式,它们都是用于创建对象的,但在使用和实现上有很大的区别。

简单工厂

简单工厂,又称静态工厂方法,主要是通过一个工厂类提供一个创建对象的方法,用户通过传入参数或者条件,工厂类内部使用 switch 或者 if-else 语句来产生不同的对象。简单工厂的主要优点是客户端不需要知道具体的产品类名,只需要知道产品所对应的参数即可。但是,这种模式也有明显的缺点,那就是如果需要添加新的产品,就必须修改工厂类的源代码,这违反了“开闭原则”。

工厂方法

工厂方法模式是简单工厂模式的进一步抽象和推广。由于简单工厂模式中工厂类的静态工厂方法通过所传入参数的不同来创建不同的产品,这就需要修改工厂类的源代码,违反了“开闭原则”。为了解决这个问题,我们可以引入一个抽象工厂角色,它定义了创建产品的方法,让具体的工厂类去实现这个方法,通过不同的工厂实例来创建不同的产品实例。

两者的主要区别在于:

  1. 创建对象的方式:简单工厂使用一个方法通过条件分支来创建不同的对象,而工厂方法则通过不同的工厂类来创建对象。

  2. 对修改的开放性:简单工厂如果要添加新的产品,就需要修改工厂的源代码,违反了“开闭原则”。而工厂方法则通过添加新的工厂类来创建新的产品,遵守了“开闭原则”。

  3. 复杂性:简单工厂的结构比较简单,但是如果产品种类非常多,工厂的创建方法会变得非常复杂。而工厂方法虽然需要更多的类和对象,但是结构更清晰,更易于管理和扩展。

应用场景的例子:例如,我们正在制作一个游戏,有很多类型的敌人,每种敌人都有不同的行为和属性。使用简单工厂,我们可以创建一个敌人工厂,通过传入的参数来创建不同的敌人。但是,如果我们希望游戏可以轻松地添加新的敌人类型,那么工厂方法可能是更好的选择。对于每种敌人,我们可以创建一个对应的敌人工厂,每个工厂都负责创建其对应的敌人。这样,如果我们要添加新的敌人,只需要添加新的工厂即可,不需要修改现有的代码。

发表评论

后才能评论