Bir interface hiçbir zaman genel amaçlı bir interface olmamalıdır. Belirli bir konuya adanmış olan bir interface, her zaman genel amaçlara adanmış olan bir interfaceden daha iyidir.


# VIOLATION
interface PlayerInterface
{
public function run();
public function jump();
public function rebound();
}

class Basketball implements PlayerInterface
{
public function run() {}
public function jump() {}
public function rebound() {}
}

class Football implements PlayerInterface
{
public function run() {}
public function jump() {}
public function rebound() {}
}

Yukarıda gördüğümüz gibi, her ne kadar kendisiyle alakası olmasa da, Football class rebound methodunu kullanmak zorunda bırakılmıştır. Bu bir prensip ihlalidir.


# REFACTORED
interface PlayerInterface
{
public function run();
public function jump();
}

interface BasketballPlayerInterface
{
public function rebound();
}

class Basketball implements PlayerInterface, BasketballPlayerInterface
{
public function run() {}
public function jump() {}
public function rebound() {}
}

class Football implements PlayerInterface
{
public function run() {}
public function jump() {}
}

Yukarıda gördüğümüz gibi, rebound methodunu BasketballPlayerInterface interface içine monte ettik ve bunu sadece Basketball classın kullanmasını sağladık. Football classımız artık kendisiyle alakasız olan methodları kullanmaya zorlanmayacaktır.