2012-07-17 3 views
0

먼저, 이것이 바보 같은 질문 인 경우 사과드립니다.main에서 만든 인스턴스를 클래스에 전달하는 방법은 무엇입니까?

enter image description here

내가 현재 내 클라이언트 클래스를 허용하기 위해 노력하고있어 :

나는 수업과 같이 흐름 응용 프로그램이 있습니다 ... 이것은 최근에 날 귀찮게되었습니다 나는 그것을 물어 가치가 있었다 생각 및 Server 클래스를 사용하여 MyApp의 메인에 작성된 서로의 인스턴스에 액세스 할 수 있습니다. 문제는 인스턴스가 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); 
    } 
} 

난 그냥 확실 해요을이 전달하는 적절한 방법 인 경우 다음

내가 무슨 짓을했는지입니다 클라이언트와 서버로서의 다른 클래스의 인스턴스는 모두 MyApp와 통신합니다. (클래스 이름은 응용 프로그램의 기능과 아무 관련이 없으므로 무시하십시오. 처음 생각했을 때 클래스 이름을 사용했습니다.)

내가 명확한 설명이 필요하면 알려주세요. 배우고 비판하는 것에 열정이 있습니다. 이것이 잘못된 방법이라면 왜 잘못되었는지 설명하고 올바른 방법을 설명 할 수 있습니까?

편집

또한 설명 :

  • 의 MyApp는 클라이언트 & 서버에 액세스 할 수 있습니다
  • 클라이언트 RedClient &에 액세스 할 수 BlueClient있다
  • 서버가 RedServer &에 액세스 할 수 있습니다 BlueServer

다른 클래스는 서로 액세스 할 수 없습니다.

답변

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); 
+0

이전에이를 명확히하지 않았기 때문에 사과드립니다. 원래의 질문을 편집하여 어떤 클래스가 어떤 클래스에 액세스했는지 설명했습니다. 따라서 MyApp는 클라이언트와 서버를 생성하지만 RedClient, BlueClient 등에 직접 액세스 할 수는 없습니다. 일부 설정자를 추가하고 기본에서 직접 설정할 것을 제안합니까? – WilliamShatner

+0

그럴 수 없다는 이유가 없습니다. – jahroy

+0

'Client'에'Server'에 대한 참조를 받고 다른 모든 색깔있는 서버를 추가하는 메소드를 작성할 수도 있습니다 ... 당신은 많은 옵션이 있습니다. – jahroy

1

나는 당신이 요구하는 것을 잘 모르겠지만, 난 당신에 대해 조금 읽을 필요가 있다고 생각 : 당신이 서버에 대한 클라이언트의 인스턴스 (또는 그 반대)을 통과 할 수없는 이유가 없다

먼저 객체 지향 프로그래밍.방금 제시 한 경우를 들어

(나는 그것을 좋아하지 않아하지만 더 나은 내가 생각입니다) 매개 변수로 서버를받을하기 위해 클라이언트 생성자를 가질 수있다 :

Client client1 = new CLient(server1) 

은 그래서 당신은 수있을 것입니다 클라이언트 메소드에서 server1 오브젝트에 액세스하십시오.

+0

가능한 경우 생성자를 추가하지 않으려합니다. 대답 주셔서 감사합니다 – WilliamShatner

1

싱글 톤으로 작업 할 수 있습니다. 클래스가 있고 항상 최대 하나의 인스턴스가 있다고 확신 할 수 있다면 그 인스턴스는 싱글 톤입니다. 어디서든 코드에서, 당신은 MyClass.getInstance를 (호출 할 수 있습니다) 당신은 싱글 톤을 얻을 것이다, 이것에

public class MyClass { 
    private static MyClass instance; 
    public static MyClass getInstance() { 
     if(instance == null) 
      instance = new MyClass(); 
     return instance; 
    } 
    private MyClass() { } 
} 

; 나는 당신에게 작은 예를주지 그것에 대해 생각해보십시오. 당신이 이야기하는 상황에 매우 실용적 일 수 있습니다.

+0

예를 들어 주셔서 감사합니다, 나는 싱글 톤을 읽어야 할 것입니다. 그러나 예, 내 지식으로는 항상 한 클래스의 인스턴스 만있을 것입니다. – WilliamShatner

관련 문제