简单工厂模式会重蹈不使用简单模式的覆辙。
一、分析简单工厂模式的缺点
由于每一种不同的product都是在同一个factory中生产,所以会有以下几点问题:
- 如果factory出现问题,该工厂制造的所有产品都将无法正常生产。
- 如果该工厂要添加新的产品,那么工厂的负责代码将会添加新的判断语句,类似于不使用简单工厂模式的时候在一个函数中进行大量的switch,届时该工厂的代码也将会膨胀起来,难以维护。
无论是扩展还是维护,每一次修改工厂都会是一次心理挑战,因为任何一点问题,都将会影响整个工厂和所有产品,这就是代码的耦合性还是比较高。
所以我们可以借鉴简单工厂模式设计的理念,再次应用。
简单工厂模式就是将不同的功能分为不同的产品,每一个产品完成一个功能。
所以我们应该将工厂也进行拆分,每一个工厂生产一个产品。
二、工厂模式的uml图
分析:
工厂方法模式是简单工厂模式的进一步抽象和推广。由于使用了面向对象的多态性,工厂方法模式保持了简单工厂模式的优点,而且克服了它的缺点。在工厂方法模式中,核心的工厂类不再负责所有产品的创建,而是将具体创建工作交给子类去做。这个核心类仅仅负责给出具体工厂必须实现的接口,而不负责哪一个产品类被实例化这种细节,这使得工厂方法模式可以允许系统在不修改工厂角色的情况下引进新产品。
三、实例
四、工厂模式优缺点
编号 | 优点 | 缺点 |
---|---|---|
1 | 在工厂方法模式中,工厂方法用来创建客户所需要的产品,同时还向客户隐藏了哪种具体产品类将被实例化这一细节,用户只需要关心所需产品对应的工厂,无须关心创建细节,甚至无须知道具体产品类的类名 | 在添加新产品时,需要编写新的具体产品类,而且还要提供与之对应的具体工厂类,系统中类的个数将成对增加,在一定程度上增加了系统的复杂度,有更多的类需要编译和运行,会给系统带来一些额外的开销。 |
2 | 基于工厂角色和产品角色的多态性设计是工厂方法模式的关键。它能够使工厂可以自主确定创建何种产品对象,而如何创建这个对象的细节则完全封装在具体工厂内部。工厂方法模式之所以又被称为多态工厂模式,是因为所有的具体工厂类都具有同一抽象父类。 | 由于考虑到系统的可扩展性,需要引入抽象层,在客户端代码中均使用抽象层进行定义,增加了系统的抽象性和理解难度,且在实现时可能需要用到DOM、反射等技术,增加了系统的实现难度。 |
3 | 使用工厂方法模式的另一个优点是在系统中加入新产品时,无须修改抽象工厂和抽象产品提供的接口,无须修改客户端,也无须修改其他的具体工厂和具体产品,而只要添加一个具体工厂和具体产品就可以了。这样,系统的可扩展性也就变得非常好,完全符合“开闭原则”。 | null |