微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

每次需要创建新的具体产品时,SimpleProductFactory都需要更改,但它遵循单一责任原则,因为这是它永远改变的唯一原因.它的唯一目的是使客户不违反开放的封闭原则,所以我认为它本身不能违反,因为很明显这个代码是需要的.

我对更换工厂不感兴趣,但是这个具体的例子是否违规.

产品

interface Product{
  public int getPrice();
}

牛奶

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

芯片

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

SimpleProductFactory

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?

回答你的问题. “是的,简单工厂违反开放封闭原则是有原因的.”

应该修改Simple Factory模式,以帮助我们为调用者选择特定的类.如果我们使这个类符合开放封闭原则,那么我们必须将负担转移到其他类,这个类将不再用于工厂的目的.并非所有原则都是绝对的.我们需要权衡使用时或不使用时的好处.

原文地址:https://www.jb51.cc/java/129265.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐