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

标签 java xml web-services jframe jdom

Class B extends Class A

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

我的问题是如何实现这个所需的功能?

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

附注这个问题可能太主观了,但我想知道这样做的方法或“正确的方法”是什么。

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);}
    }

最佳答案

如果我正确理解你的问题,你需要一种创建不同实例的方法,这些实例将根据类与类之间不同的某些逻辑创建 XML 文件,最好以后可以轻松扩展。

在本例中 Factory Design Pattern似乎是一个合理的解决方案。您可以使用 craeteMyXML() 方法定义一个接口(interface):

public interface I {
    public void createMyXML();
}

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

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.");
    }
}

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

public enum Instance {
    A, B
}

Factory 类使用父类(super class)型 I 创建 AB 的实例。

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();
    }
}

当您执行此操作时,它将产生输出:

Create XML by the rules of A.

Create XML by the rules of B.

关于java - 如何为复选框监听器切换正确的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43487326/

相关文章:

java - onPostExecute 不会被触发

javascript - 您能告诉我为什么这个 ajax 调用没有到达网络服务吗?

java - 有没有一种方法可以使用多个 LWJGL 上下文

php - 使用 php 读取 xml 响应

java - 日期和日期时间应该如何序列化 SOAP (xml) 消息

c# - 通过 System.Xml.XmlWriter 转义尖括号

xml - python etree.ElementTree 解析困难的命名空间

java - 如何在android中将textview设置为方法输出?

java - 如何在java中缩进属性文件中的内容

java - Gradle Zip 任务做多个子树?