Lan*_*ean 7 java oop design-patterns design-principles solid-principles
这个简单工厂是否违反开放封闭原则?
每次需要创建新的具体产品时,SimpleProductFactory都需要更改,但它遵循单一责任原则,因为这是它永远改变的唯一原因.它的唯一目的是使客户不违反开放的封闭原则,所以我认为它本身不能违反,因为很明显这个代码是需要的.
我对更换工厂不感兴趣,但是这个具体的例子是否违规.
产品
interface Product{
public int getPrice();
}
Run Code Online (Sandbox Code Playgroud)
牛奶
class Milk implements Product{
public int getPrice(){ return 5; }
}
Run Code Online (Sandbox Code Playgroud)
芯片
class Chips implements Product{
public int getPrice(){ return 3; }
}
Run Code Online (Sandbox Code Playgroud)
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;
}
}
Run Code Online (Sandbox Code Playgroud)
客户
class Client{
public static void main(String[] args) {
SimpleProductFactory productFactory = new SimpleProductFactory();
Product prod = productFactory.createProduct("milk");
System.out.println(prod.getPrice());
}
}
Run Code Online (Sandbox Code Playgroud)
开放/封闭原则并不真正适用于工厂,因为毕竟它们是不同类型对象的来源......
另一方面,您可以让抽象工厂使用 javas ServiceLoader查找“真实”工厂。然后,您可以添加更多真正的工厂,甚至在它们自己的罐子中,而无需更改现有代码......