Java静态接口变量



java中的static变量有问题。

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

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

为了完成这项工作,我创建了一个接口的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之前。

我认为您需要在代码中添加一些设计才能获得低耦合解决方案(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类上,并通过委托揭示连接器方法。

希望它有帮助

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

public enum Communication {
    CHOICE1, CHOICE2
}

相关内容

  • 没有找到相关文章

最新更新