很明显简单工厂模式违法了开闭原则,当我要新增一个产品只能修改老代码里面的if语句了。
和简单工厂模式相比,工厂方法模式其实就是将那个代工厂的一堆if判断去掉了,生产具体产品的任务给了各自的工厂,不是由代工厂的if,else判断来生产了,现在我们的目的变成了修改一堆if的代工厂,引入工厂模式
AbstractFactory类:生产不同产品的工厂的抽象类
public interface AbstractFactory {
Phone makePhone();
}
XiaoMiFactory类:生产小米手机的工厂(ConcreteFactory1)
public class XiaoMiFactory implements AbstractFactory{
@Override
public Phone makePhone() {
return new MiPhone();
}
}
AppleFactory类:生产苹果手机的工厂(ConcreteFactory2)
public class AppleFactory implements AbstractFactory {
@Override
public Phone makePhone() {
return new IPhone();
}
}
演示:
public class Demo {
public static void main(String[] arg) {
AbstractFactory miFactory = new XiaoMiFactory();
AbstractFactory appleFactory = new AppleFactory();
miFactory.makePhone(); // make xiaomi phone!
appleFactory.makePhone(); // make iphone!
}
}
当我们添加华为手机时,实现华为工厂,实现华为手机,不存在简单工厂模式的if,else判断,避免了修改源代码。