【发布时间】:2018-06-11 03:27:30
【问题描述】:
这个简单工厂是否违反了开放封闭原则?
每次需要创建新的具体产品时,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());
}
}
【问题讨论】:
-
你指的是
SimpleProductFactory类吗? -
@Ravi 我不确定你的意思。如果这是一个真正的程序,我想我会在多个地方使用 SimpleProductFactory,但 SimpleProductFactory 不会添加更多方法。
-
我认为您想为此使用abstract factory。编辑:正如 Timothy Truckle 在他的回答中提到的 (1+)
-
我认为 Ravi 的意思是,如果你将
SimpleProductFactory注入到Client中而不是直接实例化它,你可以将工厂子类化以在不违反 OCP 的情况下改变其行为。
标签: java oop design-patterns solid-principles design-principles