您的位置首页百科问答

设计模式之工厂方法模式

设计模式之工厂方法模式

在说工厂方法模式之前,我们先回忆一下简单工厂模式(工厂方法模式,其实就是对简单工厂模式的升级),在下面的代码中Banana和Apple都继承了Fruit,我们用一个工厂可以创建这两个对象,客户端不用关心具体创建过程。

但是我们分析下,上面代码中如果再增加一个Orange类,同样继承Fruit接口,这个时候如果让工厂也可以创建Orange类,我们必然要修改FruitFactory这个类了,如下图。试想如果Fruit类的子类随时可能增加,如果都用FruitFactory创建相应的对象,那么我一定会经常修改FruitFactory源码,这样是很不方便的,不符合“开放封闭原则“。我觉得简单工厂模式,用于创建固定的,不经常向工厂中增加功能的场景是十分有用的,如果用于创建多变对象的场景就不太合适了,这也许就是叫“简单”工厂的原因吧。

我们现在提供针对上面问题的解决方案——工厂方法模式!先实现代码再分析。抽象工厂(Creator)角色,工厂方法模式的核心,任何工厂类都必须实现这个接口。

具体工厂( Concrete Creator)角色,具体工厂类是抽象工厂的一个实现,负责实例化产品对象。

抽象(Product)角色,工厂方法模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。

具体产品(Concrete Product)角色,工厂方法模式所创建的具体实例对象。

客户端调用

我们再分析下,当要加入一个Orange类,我只需要再创建一个OrangeFactory类,而不用修改原来的代码,客户端只需调用OrangeFactory创建Orange就好了。完全符合“开放封闭原则”!

当然,工厂方法模式可能会造成工厂子类过多,客户端使用难度增加等问题。这是需要根据具体问题去考虑的。

抖音看短剧