作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
这个简单工厂是否违反了开闭原则?
每次需要创建新的具体产品时,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/
我是一名优秀的程序员,十分优秀!