开闭原则指出:一个类应该只有一个引起它变化的原因。
如果一个类应该只有一个变化原因,但是又不能被修改,开发人员如何遵循这两个原则呢? 示例 工厂模式是一个很好的例子,它具有单一职责,但可能会违反开闭原则:你应该能够扩展一个类的行为,而不需要修改它。
public abstract class Product
{
}
public class FooProduct : Product
{
}
public class BarProduct : Product
{
}
public class ProductFactory
{
public Product GetProduct(string type)
{
switch(type)
{
case "foo":
return new FooProduct();
case "bar":
return new BarProduct();
default:
throw new ArgumentException(...);
}
}
}
如果我在以后需要将ZenProduct
添加到工厂中,会发生什么?
- 这是否违反了开放/封闭原则?
- 我们如何可以避免这种违规情况?