1 工厂模式的种类
- 1.1 简单工厂
![](https://img.haomeiwen.com/i3167361/7aca2efc750901f7.png)
只有一个工厂,例如通过反射传入Class或者直接通过name字段if
else判断的方式创建不同的汽车;
只能创建一种类型的对象(即同一父类或者接口),不符合开放封闭原则(即当需要创建新对象时,需要修改工厂类)。
- 1.2 工厂方法
![](https://img.haomeiwen.com/i3167361/ee4ac9f4e834ee46.png)
相对于简单工厂模式,工厂方法模式的工厂是可以扩展的,都是继承自同一抽象工厂类。当有新的产品需要生产时,只需要生成新的工厂类的产品类,而不需要修改原有代码,完全符合开放封闭原则。
-
1.3 抽象工厂
抽象工厂模式
抽象工厂一般用于产品树或者产品族的场景。与工厂方法模式的区别就在于需要创建对象的复杂程度上。抽象工厂模式给客户端提供一个接口,可以创建多个产品族中的产品对象。例如:A和B为一个产品族、1和2为一个产品族
public abstract class AbsFactory{
public abstract A CreateA();
public abstract B CreateB();
}
public class Factory1 extends AbsFactory{
public abstract A CreateA1();
public abstract B CreateB1();
}
public class Factory2 extends AbsFactory{
public abstract A CreateA2();
public abstract B CreateB2();
}
由于每增加一个产品族,需要修改抽象工厂类以及子类,新增的产品类也很多,最终修改起来会非常丑陋。可以使用简单工厂+反射来进行优化。
2 实例
调用Iterable接口的iterator()方法,返回一个新的实例。
public interface Iterable<T>{
Iterable<T> iterator();
}
网友评论