Mám napríklad a class Doctor
ktorý chce využívať služby a class Postman
.
Ako to vyzerá z hľadiska kódu?
public class Doctor
{
...
void doCheckup(Patient);
void sendMail(){ // want to use services of a Postman here }
}
public class Postman
{
void sendMail(...){ ... }
}
Mohol by som to definovať Doctor::sendMail()
ako
void sendMail()
{
Postman A = new Postman();
A.sendMail(...);
}
Je to správne?
Ak áno, prečo by mal "doktor" vytvoriť "poštára"? Znie to naozaj ďaleko od scenárov reálneho života. Je to spôsob, akým sú správy zdieľané medzi objektmi?
odpovede:
1 pre odpoveď č. 1Ak sa snažíte vytvoriť "skutočný svetový model" vecí, potom by ste mali globálny PostOffice objekt, ktorý by obsahoval mnoho Postmanov.
Doktor by mohol byť súčasťou DoctorOffice alebo nemocnice
Doktor by mal premennú člena smerujúcu na svojho poštára
Doctor.Postman = aPostmanObject;
Potom nechal poštár robiť prácu.
Doctor.Postman.SendMail();
Za predpokladu, že ste urobili "SendMail" verejnú metódu Postman (čo by bolo, pretože to robí ako verejná služba)
2 pre odpoveď č. 2
Menej idiomatickým spôsobom by bolo mať niečo ako:
void sendMail(Postman postman) {
postman.sendMail(...);
Nevytvárajte iný objekt vo vnútri prvého.
Na sidenote, Doctor::sendMail
je C + + syntax. V jazyku Java nie je žiadne ::