webForumDet fria alternativet

Hjälp med klass-skapandet

6 svar · 243 visningar · startad av jme

jmeMedlem sedan maj 20012 237 inlägg
#1

Hej!

Jag gör en enkel GUI-baserad chat-client som i sin helhet låter användaren skriva meddelande till servern som sedan svarar.

Jag vill göra detta på ett bra sätt, dvs jag vill hålla isär GUI-klassen samt klassen som sköter uppkoplingen mot servern.

Jag har följande klasser:

- Client : innehåller GUI
- ClientConnector : sköter uppkopplingen mot servern

Jag vill att båda klasserna skall vara så separerade från varandra som möjligt(de-coupling?)

När användaren skriver in text i en JTextField och trycker på enter så förmedlas texten till ClientConnector klassens metod send(String) som skickar iväg meddelandet till servern:

Förenklat:

ClientConnector.send(JTextArea.getText() );

Klassen ClientConnector har en while-loop som läser in data från InputStream som sedan skall visas i Client klassens JTextArea. Detta har jag problem med. Hur skall jag få datan som kommer från servern att synas i JTextArean utan att skapa ett allt för starkt band mellan dessa två klasser?

Lättast men inte det bästa sättet vore att ge ClientConnector en referens till Client klassen JTextArea. Men ClientConnector har ju egentligen ingenting med GUI att göra och vice versa.

Kanske är detta enkelt att genomföra och kanske tänker jag helt fel.

Mitt problem är att jag vill göra detta snyggt och elegant. ;)

antilizaerMedlem sedan apr. 200357 inlägg
#2

Return?

Varför inte bara låta ClientConnector.send() returnera en sträng som du sen sätter i JtextArea

SPiNMedlem sedan mars 20007 896 inlägg
#3

Jag vill att båda klasserna skall vara så separerade från varandra som möjligt(de-coupling?)

Jäpp, de-coupling. :)

I GUI:

String serverSaid = ClientConnector.getResult();

Behöver det bli svårare? Jag kanske är ute och cyklar, och inte riktigt förstår vad du menar?

SPiNMedlem sedan mars 20007 896 inlägg
#4

antilizaer> Troligtvis vill jme uppdatera fältet även utan att användaren ska behöva skriva ett inlägg, det ska ju bli en chat-klient. :)

LimeMedlem sedan sep. 2001961 inlägg
#5

Pattern...

Kolla på Model-View-Controller...

jmeMedlem sedan maj 20012 237 inlägg
#6

Jag använde följande lösning:

Jag separerade GUIn från klassen som sköter uppkopplingen på följande sätt:

abstract class AbstractClient implements IrcTool

interface IrcTool
- innehåller abtrakta metoden void setMessage(String)

class ClientGUI extends AbstractClient

class IrcConnector

- sköter uppkopplingen

while(true)

String data = läs in data från InputStream

skicka iväg det genom AbstractClient.setMessage(data)

Enda kopplingen jag nu har är således mellan IrcConnector och den abstrakta klassen AbstractClient. Men nu så kan utvecklaren fritt skapa sin GUI bara den ärver från AbstractGUI och implementerar metoden setMessage(String).

Vad säger ni? Denna lösning gav läraren åt mig och jag tycker att lösningen är iaf bättre än den jag försökte med.

SPiNMedlem sedan mars 20007 896 inlägg
#7

http://www.webforum.nu/showthread.php?s=&postid=706901#post706901 ;)

Nej, funkar det så är det ju en bra lösning. Men nu har du ändå "couplat" ihop klasser med arv. :)

Gick det inte att ha en statisk metod för att skicka data då?

130 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)