Program to an interface, not to an implementation, esnek (flexible), genişletilebilir (extensible) ve idare edilebilir (maintainable) yazılım yazmayı kolayylaştıran en önemli ilke olarak göze çarpıyor.
Duck örneği, bir oyun tasarlaması olarak ördek yazıdığımızı varsayalım. ve 9 davranışı farklı ördek olsun, genel davranışları ötmesi ve ucması. sözkonusu ördek için bir superclass yazıp her bir cesit içinde davranışları override etme işin için cıkılmaz ve zor bir yapıya götürüyor. ancak her bir davranışı(algoritmasını) bir interface ile classlara implement ederek tasarlarsak dizayn çok kullanışlı ve anlamlı olmaya başlıyor. Aşağıdaki örnek gibi
RedDuck x = new RedDuck();
x.otusu();
x.ucusu();
Console.ReadLine();
public
interface FlyAble
{
void
fly();
}
public
interface QuackAble
{
void
Quack();
}
public
class FlyWithRocket : FlyAble
{
#region
FlyAble Members
public
void fly()
{
Console
.WriteLine("Roket Hızı ile ucuyorum");
}
#endregion
}
public
class NoFly : FlyAble
{
#region
FlyAble Members
public
void fly()
{
Console
.WriteLine("Ucamıyorum");
}
#endregion
}
public
class FlyForNormal : FlyAble
{
#region
FlyAble Members
public
void fly()
{
Console
.WriteLine("Normal Ucuyor");
}
#endregion
}
public
class quackOver : QuackAble
{
#region
QuackAble Members
public
void Quack()
{
Console
.WriteLine("Vack Vırak");
}
#endregion
}
public
class quackMute : QuackAble
{
#region
QuackAble Members
public
void Quack()
{
Console
.WriteLine("Ötemiyorum pıt pıt ");
}
#endregion
}
public
class RedDuck
{
FlyAble
ucması;
QuackAble
otmesi;
public
void ucusu()
{
ucması =
new FlyWithRocket();
ucması.fly();
}
public
void otusu()
{
otmesi =
new quackOver();
otmesi.Quack();
}
}