如何为复选框监听器切换正确的类?

时间:2017-04-19 05:43:32

标签: java xml web-services jframe jdom

Class B extends Class A

我有一个带有开始按钮的GUI和一个复选框,它根据给定的文本输入创建多个A类实例(我的Web服务的蓝图)。如果选中该复选框,则会将一些其他元素写入XML文件(这是整个应用程序的主要输出)。现在我想添加一个额外的复选框,它将提供GUI来创建B类实例,它扩展了A类但提供了一些额外的字段和逻辑。

我的问题是如何实现此必需功能?

鉴于C类中有一个createMyXML()方法对于其方法的类A或类B的硬编码参数执行相同的操作,我是否应该扩展它以将其中一个类作为参数并创建实例对于XML中的必需元素?

P.S。这个问题很可能过于主观,但我想知道什么是方法或正确的方法'这样做。

A级解剖学

public class A {

    private String id;

    private Vector<String> inputs;

    private Vector<String> outputs;

    //***Getters and Setters for above.***

}

C级解剖学

public class C {
        void createMyXML(){
            for (A a : this.parser.getAttributes()){
                createFirstElement(A a);
                createSecondElement(A a);
            // Or (This behavior should be triggered by the checkbox)
                createFirstElement(B b);
                createSecondElement(B b);}
    }

1 个答案:

答案 0 :(得分:3)

如果我理解你的问题,你想要一种创建不同实例的方法,这些实例将根据一个不同类的逻辑创建XML文件,最好在以后轻松扩展。

在这种情况下,Factory Design Pattern似乎是一个合理的解决方案。您使用craeteMyXML()方法定义接口:

public interface I {
    public void createMyXML();
}

为每个XML创建逻辑添加一个类。在此示例中,我添加了两个类:AB,它们实现了I接口。

班级A

import java.util.Vector;

public class A implements I {

    private String id;
    private Vector<String> inputs;
    private Vector<String> outputs;

    @Override
    public void createMyXML() {
        System.out.println("Create XML by the rules of A.");
    }

    /* Getters and setters and other methods needed*/
}

班级B

public class B implements I {

    @Override
    public void createMyXML() {
        System.out.println("Create XML by the rules of B.");
    }
}

您可以使用enum作为工厂的参数,根据它创建实例。您也可以使用其他选项,例如String值或int,这取决于您的解决方案。在这里,我将可用实例定义为enum

public enum Instance {
    A, B
}

Factory类使用超类型A创建BI的实例。

public class Factory {
    public static I createInstance(Instance i) {
        if (i == Instance.A) {
            return new A();
        } else if (i == Instance.B) {
            return new B();
        } else {
            return null;
        }
    }
}

我正在添加Test类来快速测试此解决方案,您可以将其合并到项目中。

public class Test {
    public static void main(String[] args) {
        I a = Factory.createInstance(Instance.A);
        I b = Factory.createInstance(Instance.B);

        a.createMyXML();
        b.createMyXML();
    }
}

执行此操作时,将生成输出:

  

按照A。规则创建XML。

     

按B规则创建XML。