[英]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.