首先,如果这是一个愚蠢的问题,我道歉。这最近一直困扰着我,我觉得值得一提......
我有一个应用程序,类如下所示:
我目前正在尝试允许我的Client类和Server类访问在MyApp的main中创建的彼此的实例。问题是实例是在main中创建的(因此使它们成为静态的),我想知道如何正确地将它们传递给其他类,因为我所做的事情似乎并不是正确的方法。
以下是我所做的:
public class MyApp {
private static RedClient red_client = null;
private static BlueClient blue_client = null;
private static RedServer red_server = null;
private static BlueServer blue_server = null;
public static void main(String[] args) {
final Client myClient = new Client(arg1, arg2);
red_client = myClient.getRedClient();
blue_client = myClient.getBlueClient();
final Server myServer = new Server(arg3, arg4);
red_server = myServer.getRedServer();
blue_server = myServer.getBlueServer();
}
public static RedClient getRedClient() {
return red_Client;
}
public static BlueClient getBlueClient() {
return blue_client;
}
public static RedServer getRedServer() {
return red_server;
}
public static BlueServer getBlueServer() {
return blue_server;
}
}
我稍后会像以下那样使用以下内容:
public class Client {
public void SomeMethod {
MyApp.getBlueServer.doSomething(myObject);
}
}
我只是不确定这是否是将实例传递给其他类的正确方法,因为Client和Server都与MyApp通信。 (请忽略类名,因为它们与应用程序的功能无关,我只是将它们用作名称,因为这是我能想到的第一件事。)
如果您需要任何澄清,请告诉我,因为我愿意接受学习和批评。如果这是错误的方式,你能解释为什么它是错的,然后解释正确的方法。
修改
进一步澄清:
没有其他类可以互相访问。
答案 0 :(得分:2)
您应该查看Java Observer模式:
http://www.javapractices.com/topic/TopicAction.do?Id=156
http://www.vogella.com/articles/DesignPatternObserver/article.html
答案 1 :(得分:2)
我没有看到你传递/设置任何东西。
没有理由不能将客户端实例传递给服务器(反之亦然):
Client myClient = new Client(args);
Server myServer = new Server(args);
BlueClient = myClient.getBlueClient();
RedCLient = myClient.getRedClient();
BlueServer = myServer.getBlueServer();
RedServer = myServer.getRedServer();
myClient.addServer(blueServer);
myClient.addServer(redServer);
myServer.addClient(blueClient);
myServer.addClient(redClient);
答案 2 :(得分:1)
我不确定你要求的是什么,但我认为你需要首先阅读一些关于面向对象编程的内容。
对于您刚刚提交的案例(我不喜欢它,但我认为它更好),您可以让客户端构造函数接收服务器作为参数:
Client client1 = new CLient(server1)
这样您就可以从客户端方法访问server1对象。
答案 3 :(得分:1)
你可以和单身人士一起工作。如果你有一个类,并且你可以确定总是有一个最大的实例,那么该实例就是一个单例。我会给你一个小例子:
public class MyClass {
private static MyClass instance;
public static MyClass getInstance() {
if(instance == null)
instance = new MyClass();
return instance;
}
private MyClass() { }
}
有了这个,你可以在你的代码中的任何地方调用MyClass.getInstance(),然后你就会得到一个单例;想一想;对于你所谈论的情况来说,它非常实用。