You*_*f13 5 java factory open-closed-principle
本教程中的工厂显然违反了 OCP。每次在系统中添加一个形状,我们都需要在工厂中添加它以支持它。我正在考虑另一个实现,我想知道是否有任何缺点。
public class ShapeFactory {
//use getShape method to get object of type shape
public Shape getShape(Class<? extends Shape> shapeType){
return shapeType.newInstance();
}
}
Run Code Online (Sandbox Code Playgroud)
这个实现看起来不违反OCP,也不复杂。有什么原因我找不到任何提到它的工厂设计模式教程吗?
我认为@hfontanez 对“工厂模式是否违反开放/封闭原则?”这个问题的回答。盖子。如果您要添加新的 Shape 子类,您还必须添加一种方法来创建它们的实例。假设您无法修改原始 ShapeFactory,因为它是第三方库的一部分,但您可以子类化或装饰原始工厂以添加对新形状的支持。扩展该示例将如下所示:
public class AdvancedShapeFactory {
private final ShapeFactory factory = new ShapeFactory();
public Shape getShape(String shapeType) {
if (shapeType.equalsIgnoreCase("PENTAGON")) {
return new Pentagon();
} else {
return factory.getShape(shapeType);
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果最初虚构的“形状”库的设计者希望能够轻松地通过形状类型创建新形状,他们可以实现一个注册表:
public class ShapeRegistry {
private static final Map<String, Class<Shape>> shapeTypes = new HashMap<>();
public void registerShape(String shapeType, Class<Shape> shapeClass) {
shapeTypes.put(shapeType, shapeClass);
}
public Shape getShape(String shapeType) throws InstantiationException, IllegalAccessException {
if (shapeTypes.containsKey(shapeType)) {
return shapeTypes.get(shapeType).newInstance();
}
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
279 次 |
| 最近记录: |