繁体   English   中英

Java静态接口变量

[英]Java static interface variable

我在Java中有一个static变量的问题。

我正在做一个在线游戏,我提供了两种与服务器通信的方法。

对于每种通信方式,我创建了一个不同的类,它们都实现了相同的接口。 应用程序启动后,用户可以选择通信机制。

为此,我创建了接口的static变量,并在用户选择通信方法后分配了值,但是我想避免使用static字段,这样做的最佳方法是什么?

这是代码:

我在主班宣布

 public class Main extends Application {
    public static Connector connector;
}

然后根据用户选择:

private void connectWithServer()
{
    String hostValue = serverTextField.getText();
    switch (serverComboBox.getSelectionModel().getSelectedIndex())
    {
        case 0:
            Main.connector=new KryoConnector("127.0.0.1");
            break;
        case 1:
            Main.connector=new RMIConnector("127.0.0.1");
            break;
        case 2:
            Main.connector=new KryoConnector(hostValue);
            break;
        case 3:
            Main.connector=new RMIConnector(hostValue);
            break;
    }
}

后来我调用这样的方法:

Main.connector.createBoard(this);

我仔细查看了答案,然后想到了这样的事情:

public enum ConnectionContext {
    INSTANCE;
    private Connector connector;
    public void setConnector(Connector connector)
    {
        this.connector=connector;
    }
    public Connector getConnector()
    {
        return connector;
    }
}

然后,我将其调用如下:

 ConnectionContext.INSTANCE.getConnector().someMethod();

这样我可以避免使用静态方法,但是有没有以更短的方式引用它呢? 因为之前我只有Main.connector。

因为用户可以选择通信机制 ,所以您需要使用enum ,这是正确的选择,请看这里 因此,您可以用enum类型定义所有通信模式,并提示用户选择一种。 例如

public enum Communication {
    CHOICE1, CHOICE2
}

我认为您需要在代码中添加一些设计以实现低耦合的解决方案(ConnectionContext.INSTANCE.getConnector()。someMethod();绝对不是要走的路)。

我建议的只是使用方法委托。 像这样:

public enum ConnectionContext {

    INSTANCE;

    private Connector connector;

    public void setConnectionMode(Connector connector){
             this.connector=connector;
    }

    //Method Delegation 
    public Double someMethod() {
        return this.connector.someMethod();
    }
}

这样,您就封装了对连接的所有访问权限,因为您的应用程序根本不需要关心它。 您只是将外部方法集中在处理ConnectionContext类上,而通过委派公开了Connector方法。

希望能帮助到你

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM