如何在Java中创建自注册工厂?

问题描述 投票:0回答:1

工厂模式违反了OCP原则,因为它使用if()语句,这意味着如果添加任何类,则工厂类必须进行更改,这与SOLID原则背道而驰。自注册类应该根据以下资源来解决此问题:http://www.jkfill.com/2010/12/29/self-registering-factories-in-c-sharp/。问题是我不知道C#。有人可以用Java举例说明吗?预先感谢。

public class ShapeFactory {

   //The purpose of self registering classes is to avoid if's
   public Shape getShape(String shapeType){
      if(shapeType == null){ //Get rid of this
         return null;
      }     
      if(shapeType.equalsIgnoreCase("CIRCLE")){
         return new Circle();

      } else if(shapeType.equalsIgnoreCase("RECTANGLE")){
         return new Rectangle();

      } else if(shapeType.equalsIgnoreCase("SQUARE")){
         return new Square();
      }

      return null;
   }
}
java design-patterns solid-principles
1个回答
0
投票

这种自动注册的东西是个坏主意。最终,要知道实际注册了哪些工厂,它们的名称是什么以及由此支持哪些名称字符串将非常困难。

保持简单明了更好,容易。通常,它类似于:

  • ShapeFactory应该具有将形状类型字符串映射到相应工厂的Map<String, Supplier<Shape>>;和
  • [ShapeFactory或它的构建器,应具有一个addShapeType(String,Supplier<Shape>),用于在创建ShapeFactory实例时注册所有类型。
© www.soinside.com 2019 - 2024. All rights reserved.