Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用生成器模式构建抽象类?_Java_Builder Pattern - Fatal编程技术网

Java 如何使用生成器模式构建抽象类?

Java 如何使用生成器模式构建抽象类?,java,builder-pattern,Java,Builder Pattern,这是我的抽象类 public abstract class AbstractActionModel implements IActionModel{ public abstract void getModel(); public abstract void getAction(); } 然后我想使用这个抽象类,如下所示: this.getActions().put("sth", AbstractActionModel.builder().action("sth").build(

这是我的抽象类

public abstract class AbstractActionModel implements IActionModel{
    public abstract void getModel();
    public abstract void getAction();
}
然后我想使用这个抽象类,如下所示:

this.getActions().put("sth", AbstractActionModel.builder().action("sth").build());
因为我不能实例化一个抽象类,所以构建器模式不能工作。我也不知道有什么替代模式可以这样做


注意:我也不知道从这个基类扩展而来的类。

如果你想在不知道具体子类的情况下编写一个构建器,那么代码的调用方必须提供关于要创建哪个子类的信息——要么提供一个实际的类对象,要么注册一组具有名称的类。例如:

public class Builders
{

    public static abstract class AbstractActionModel
    {
        public abstract void getModel();

        public abstract void getAction();
        public abstract void setAction(String action);
    }

    public static class ConcreteActionModel extends AbstractActionModel
    {
        public void getModel() {};

        public void getAction() {};
        public void setAction(String action) {};
    }

    public static class ModelBuilder
    {
        AbstractActionModel model;

        Map<String, Class<? extends AbstractActionModel>> register = new HashMap<String, Class<? extends AbstractActionModel>>();
        public void register(String key, Class<? extends AbstractActionModel> c) {register.put("concrete", ConcreteActionModel.class);}

        public ModelBuilder choose(String key) throws InstantiationException, IllegalAccessException {          
            model = register.get(key).newInstance();
            return this;
        }

        public ModelBuilder action(String action) {
            model.setAction(action);
            return this;
        }

        public AbstractActionModel build() {
            return model;
        }
    }

    public static void main(String[] args) throws Exception
    {       
        ModelBuilder mb = new ModelBuilder();
        mb.register("concrete", ConcreteActionModel.class);
        mb.choose("concrete").action("sth").build();
    }
}
公共类生成器
{
公共静态抽象类AbstractActionModel
{
公共抽象模型();
公开摘要void getAction();
公共抽象void集合动作(字符串动作);
}
公共静态类ConcreateActionModel扩展了AbstractActionModel
{
public void getModel(){};
public void getAction(){};
公共void集合动作(字符串动作){};
}
公共静态类建模器
{
抽象模型;

MapHow您想如何选择要创建的具体子类?看看这里,这样就没有静态的方法可以做到这一点?像这个AbstractActionModel.builder()?不是没有提供一个具体的类或一种获取类的方法-如果您不知道它是什么,您如何构建它?