【问题标题】:how to pass args pattern factory java如何传递args模式工厂java
【发布时间】:2014-03-22 09:15:53
【问题描述】:

我想在java中实现一个工厂模式,但是我有一些问题

我有 AbstractAction 类,它是 MapMoveAction、CutAction 等子类的抽象类

和类ActionFactory是创建具体类实例的工厂,动作工厂类包含一个静态方法createAction,它以字符串作为参数来识别要创建的具体类

但我的问题是每个具体类在需要构造时都采用不同的参数:

 public class ActionFactory {

    public AbstractAction createAction(String uniqueName) {

        // TODO
    }
}

public class CutAction extends AbstractAction{

    public static final String UNIQUE_NAME = "cut";
    List<Resource> resources;

    public CutAction(List<Resource> resources) {
        this.resources = resources;
    } 

    @Override
    public String getActionCommand() {
        StringBuilder command = new StringBuilder(UNIQUE_NAME);
        command.append(" ");

        for(Resource resource : resources) {
            command.append(resource.getName());
            command.append(",");
        }

        command.deleteCharAt(command.lastIndexOf(","));

        return command.toString();
    }
}

public class UseAction extends AbstractAction{

    public static final String UNIQUE_NAME = "use";

    int cell;

    public UseAction(int cell) {
        this.cell = cell;
    }

    @Override
    public String getActionCommand() {
        return UNIQUE_NAME  + " " + cell;
    }

}

【问题讨论】:

    标签: java object design-patterns factory


    【解决方案1】:

    factory pattern 还表示有一个带有具体工厂子类的抽象工厂。

    这种模式的本质是“定义一个用于创建对象的接口,但让实现该接口的类决定实例化哪个类。工厂方法让一个类将实例化推迟到子类。”

    因此,您需要将ActionFactory 抽象化:

    public abstract class ActionFactory {
        public abstract AbstractAction createAction();
    }
    

    注意,createAction 方法不再需要参数。然后你写具体的工厂,比如

    public class CutActionFactory extends ActionFactory {
        @Override
        public CutAction createAction() {
            // This factory knows how to create CutAction instances.
            return new CutAction(createResources())
        }
        private List<Resource> createResources { ... }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-30
      • 2012-11-18
      • 1970-01-01
      • 1970-01-01
      • 2011-04-04
      • 2016-02-01
      相关资源
      最近更新 更多