서버에서 데이터를 쉽게 검색 할 수 있도록 "네트워크 연결"을 설계하려고합니다. 그러나, 나는 디자인 문제에 직면 해있다. 내가 사용하는거야OOP 구조 디자인
내 NetworkUtil
클래스는 일단 내가 resultType을 확인하고 해당 매개 변수의 결과를 사용, 도착 결과
class NetworkUtil
public NetworkUtil(URL, resultType); // resultType might be XML or RAW
public setListener(listener); // listener will notice when result has arrive
public addPostData(key, value);
public connect(); // connect start new thread, so result will shown in listener
interface NetworkUtilListener1
public onNetworkFail();
public onNetworkSuccess(URL, resultType, xml, raw);
interface NetworkUtilListener2
public onNetworkFail();
public onNetworkSuccessRAW(URL, resultType, raw);
public onNetworkSuccessXML(URL, resultType, xml);
으로 설계되었다. 그러나 위에 표시된 2 가지 예 (NetworkUtilListener1
및 NetworkUtilListener2
)에서는 이후 resultType
이 JSON, 이미지 또는 내 사용자 정의 유형과 같은 경우 향후 문제를 고려하므로 팀에서 쉽게 사용할 수 있습니다.
NetworkUtilListener1
onNetworkSuccess(URL, resultType, raw, xml, json, image);
처럼 오랫동안 사용되지 않는 매개 변수가됩니다.
NetworkUtilListener2
대부분의 경우 우리는 각 프로젝트에서 1 또는 2 가지 유형의 결과 만 선호하므로 대부분의 빈 방법을 사용하는 콘크리트 클래스를 강제로 사용하게됩니다.
onNetworkSuccessRAW(URL, resultType, raw);
onNetworkSuccessXML(URL, resultType, xml);
onNetworkSuccessJSON(URL, resultType, json);
onNetworkSuccessImage(URL, resultType, image);
누구나이 클래스 구조를 재 설계하거나 나에게 집중해야 할 디자인 패턴을 제안 할 수 있습니다. 그래서 나는 더 나은 NetworkListener
수 있습니다.
답변 해 주셔서 감사합니다.하지만 솔루션에 NetworkUtilListener2와 동일한 문제가 있다고 생각합니다. 구체적인 클래스 (예 : SampleListener)가 많은 빈 메서드를 구현해야합니다. 그러나 코드에서 하나의 아이디어를 제안합니다. 리스너를위한 인터페이스 대신 클래스를 사용하는 경우 실제 concreate 클래스는 인터페이스에서 모든 기능을 가질 필요가 없습니다. 하지만 여전히 좋은 생각이라고 확신하지 못합니다. – Chetchaiyan
@Chetchaiyan 방문자 패턴에는 고려해야 할 많은 이점이 있습니다. 코드가 모든 유형의 결과를 개별적으로 처리하기 때문에 많은 방법을 구현해야하는 필요성에 대해서는 의도적으로 설계된 것입니다. 그러나 모든 메소드의 빈 구현을 사용하여 abstact 클래스 (예 : NetworkUtilsAdapter)를 정의 할 수 있습니다 (일부 Java Swing 수신기 [즉, WindowAdapter]에서 사용되는 전략과 유사). 그런 다음 실제 리스너 구현은이 추상 어댑터를 확장하고 관심있는 특정 메소드를 구현할 수 있습니다. –