工厂方法模式(不要与工厂或抽象工厂模式混淆)是否违反了开放/封闭原则?
更新:为了澄清,我指的是具体类上有静态工厂方法的场景。例如(这来自 FMP 上的 Wikipedia 页面):
class Complex
{
public static Complex fromCartesian(double real, double imag) {
return new Complex(real, imag);
}
public static Complex fromPolar(double modulus, double angle) {
return new Complex(modulus * cos(angle), modulus * sin(angle));
}
private Complex(double a, double b) {
//...
}
}
私有构造函数不会阻止类被子类化,即扩展吗?
难道不需要修改类来支持新的工厂方法吗?例如,如果该类最初只有 fromCartesian 而后来需要 fromPolar,那么是否必须修改该类以支持这一点?
这两个都不违反开/关吗?