„Bună, Amigo! Sunt eu — din nou. Vreau să vă ofer un alt punct de vedere asupra interfețelor. Vedeți, de cele mai multe ori o clasă este un model al unui anumit obiect. În schimb, interfețele seamănă mai mult cu abilitățile unui obiect sau roluri, mai degrabă decât obiectul în sine”.

De exemplu, lucruri precum mașinile, bicicletele, motocicletele și roțile sunt cel mai bine reprezentate ca clase și obiecte. Dar abilitățile lor, precum „Pot să mă mișc”, „Pot transporta oameni” și „Pot parca”, sunt mai bine reprezentate ca interfețe. Consultați acest exemplu:

Cod Java Descriere
interface Moveable
{
void move(String newAddress);
}
Corespunde capacitatii de miscare.
interface Driveable
{
void drive(Driver driver);
}
Corespunde capacitatii de miscare.
interface Transport
{
void addStuff(Object stuff);
Object removeStuff();
}
Corespunde capacitatii de a transporta marfa.
class Wheel implements Moveable
{
...
}
O clasă „roată”. Are capacitatea de a se mișca.
class Car implements Moveable, Drivable, Transport
{
...
}
O clasă „mașină”. Are capacitatea de a se mișca, de a fi condus de o persoană și de a transporta marfă.
class Skateboard implements Moveable, Driveable
{
...
}
O clasă de „skateboard”. Are capacitatea de a se mișca și de a fi controlat de o persoană.

Interfețele simplifică foarte mult viața programatorului. Programele au deseori mii de obiecte, sute de clase și doar câteva zeci de interfețe (roluri). Sunt puține roluri, dar pot fi combinate în multe feluri (clase).

Ideea este că nu trebuie să scrieți interacțiunea care definește codul cu orice altă clasă. Tot ce trebuie să faci este să interacționezi cu roluri (interfețe).

Imaginează-ți că ești un constructor de roboti. Ai zeci de roboți subordonați și fiecare dintre ei poate avea mai multe abilități. Să presupunem că trebuie să terminați urgent construirea unui perete. Doar luați toți roboții care au capacitatea de a „construi” și le spuneți să construiască zidul. Nu-ți pasă cu adevărat ce roboți o fac. Lasă-l să fie un robot de udare. Dacă știe să construiască, lăsați-l să construiască.

Iată cum ar arăta în cod:

Cod Java Descriere
static interface WallBuilder
{
void buildWall();
}
Abilitatea de a „construi un zid”. Înțelege comanda „construiește un zid” (are metoda corespunzătoare).
static class WorkerRobot implements WallBuilder
{
void buildWall()
 {
…
 }
}
static class GuardRobot implements WallBuilder
{
void buildWall()
 {
…
 }
}
static class WateringCan
{
…
}
Roboți care au această abilitate/abilitate.

Un udato nu poate construi un zid (nu implementează interfața WallBuilder).

public static void main(String[] args)
{
 //add all robots to a list
 ArrayList robots = new ArrayList();
 robots.add(new WorkerRobot());
 robots.add(new GuardRobot());
 robots.add(new WateringCan());

 //build a wall if you can
 for (Object robot: robots)
 {
  if (robot instanceof WallBuilder)
  {
   WallBuilder builder = (WallBuilder) robot;
   builder.buildWall();
   }
  }
 }
}
Cum dăm comanda de a construi un zid?

"Este uimitor de interesant. Nu am visat niciodată că interfețele ar putea fi un subiect atât de interesant."

"Și apoi ceva! Împreună cu polimorfismul, este total uluitor."