java - 这个简单工厂是否违反了开闭原则?

标签 java oop design-patterns solid-principles design-principles

这个简单工厂是否违反了开闭原则?

每次需要创建新的具体产品时,SimpleProductFactory 都需要更改,但它遵循单一职责原则,因为这是它永远更改的唯一原因。它的唯一目的是让客户端不违反开放封闭原则,所以我想它本身不会违反,因为显然某处需要这段代码。

我对更改工厂不感兴趣,但对这个具体示例是否违规不感兴趣。

产品

interface Product{
  public int getPrice();
}

牛奶

class Milk implements Product{
  public int getPrice(){ return 5; }
}

筹码

class Chips implements Product{
  public int getPrice(){ return 3; }
}

简单产品工厂

class SimpleProductFactory{

  public Product createProduct(String productName){

    if(productName.equals("milk")){
      return new Milk();
    }
    else if(productName.equals("chips")){
      return new Chips();
    }
    return null;
  }
}

客户端

class Client{
  public static void main(String[] args) {
    SimpleProductFactory productFactory = new SimpleProductFactory();
    Product prod = productFactory.createProduct("milk");
    System.out.println(prod.getPrice());

  }
}

最佳答案

Is this Simple Factory violating the Open Closed Principle?

回答您的问题。 “是的,简单工厂违反了开闭原则是有原因的。”

应该修改简单工厂模式,以帮助我们为调用者选择特定的类。如果我们让这个类符合开闭原则,那么我们就必须将负担转移到其他类上,这个类将不再服务于工厂的目的。并非所有原则都是绝对的。我们需要在使用或不使用时权衡利弊。

关于java - 这个简单工厂是否违反了开闭原则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48043773/

相关文章:

java - Java 中集合的泛型和通配符

java - 如何在传递它的原始方法中访问修改后的 StringBuilder

C++ 多态性 - 自动检测派生类型

sql - 替换动态文本 SQL

design-patterns - 为什么在未开发的 ASP.Net MVC 应用程序中使用提供程序模型会让人感觉倒退?

java - 简单无锁堆栈

java - JList 重新填充非常慢

python - 使用数据类初始化对象时修改属性

python - 在Python中使用类方法是否可以解构 `self`?

java - 结果组合的推荐设计模式