"Merhaba Amigo! Yine ben. Size arayüzler hakkında başka bir bakış açısı sunmak istiyorum. Görüyorsunuz, çoğu zaman bir sınıf belirli bir nesnenin modelidir. Buna karşılık, arayüzler daha çok bir nesnenin yetenekleri veya yetenekleri gibidir. nesnenin kendisinden ziyade roller."

Örneğin, arabalar, bisikletler, motosikletler ve tekerlekler gibi şeyler en iyi şekilde sınıflar ve nesneler olarak temsil edilir. Ancak "Hareket edebilirim", "İnsanları taşıyabilirim" ve "Park edebilirim" gibi yetenekleri arayüzler olarak daha iyi temsil edilir. Bu örneğe göz atın:

java kodu Tanım
interface Moveable
{
void move(String newAddress);
}
Hareket etme yeteneğine karşılık gelir.
interface Driveable
{
void drive(Driver driver);
}
Hareket etme yeteneğine karşılık gelir.
interface Transport
{
void addStuff(Object stuff);
Object removeStuff();
}
Kargo taşıma kabiliyetine karşılık gelir.
class Wheel implements Moveable
{
...
}
Bir «tekerlek» sınıfı. Hareket etme kabiliyetine sahiptir.
class Car implements Moveable, Drivable, Transport
{
...
}
Bir "araba" sınıfı. Hareket etme, bir kişi tarafından sürülme ve yük taşıma yeteneğine sahiptir.
class Skateboard implements Moveable, Driveable
{
...
}
Bir «kaykay» sınıfı. Hareket etme ve bir kişi tarafından kontrol edilme yeteneğine sahiptir.

Arayüzler, programcının hayatını büyük ölçüde basitleştirir. Programlar genellikle binlerce nesneye, yüzlerce sınıfa ve yalnızca birkaç düzine arabirime (rol) sahiptir. Birkaç rol vardır, ancak birçok şekilde (sınıflar) birleştirilebilirler.

Bütün mesele şu ki, diğer tüm sınıflarla etkileşimi tanımlayan kod yazmak zorunda değilsiniz. Tek yapmanız gereken rollerle (arayüzlerle) etkileşime geçmek.

Robotik bir inşaatçı olduğunuzu hayal edin. Düzinelerce yardımcı robotunuz var ve bunların her biri birden fazla beceriye sahip olabilir. Bir duvar inşa etmeyi acilen bitirmeniz gerektiğini varsayalım. Sadece "inşa etme" yeteneğine sahip tüm robotları alıp onlara duvarı inşa etmelerini söylüyorsunuz. Hangi robotların yaptığı gerçekten umurunuzda değil. Robotik bir sulama kabı olsun. Nasıl inşa edileceğini biliyorsa, bırakın inşa etsin.

İşte kodda nasıl görüneceği:

java kodu Tanım
static interface WallBuilder
{
void buildWall();
}
"Duvar inşa etme" yeteneği. «Duvar ör» komutunu anlar (uygun yöntemi kullanır).
static class WorkerRobot implements WallBuilder
{
void buildWall()
 {}
}
static class GuardRobot implements WallBuilder
{
void buildWall()
 {}
}
static class WateringCan
{}
Bu yeteneğe/yeteneğe sahip robotlar.

Bir sulama bir duvar inşa edemez (WallBuilder arayüzünü uygulamaz).

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();
   }
  }
 }
}
Duvar ör emrini nasıl veririz?

"Bu inanılmaz derecede ilginç. Arayüzlerin bu kadar ilginç bir konu olabileceğini hiç düşünmemiştim."

"Ve sonra bazıları! Polimorfizmle birlikte, tamamen akıllara durgunluk veriyor."