User Tools

Site Tools


i

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
i [2022/03/09 13:29] – создано chifeki [2023/09/14 06:06] (current) – external edit 127.0.0.1
Line 1: Line 1:
 ====== Принцип разделения интерфейса (Interface Segregation Principle, ISP). ====== ====== Принцип разделения интерфейса (Interface Segregation Principle, ISP). ======
  
 +
 +Четвертый SOLID принцип из пяти.
 +Формулировка:
 +
 +//Клиенты не должны зависить от методов, которые они не используют.//
 +
 +или
 +
 +//Много специализированных интерфейсов лучше, чем один универсальный.//
 +
 +
 +Иными словами большие, объемные интерфейсы надо разбивать на мелкие таким образом, чтобы клиенты
 +маленьких интерфейсов знали только о тех методах которые необходимы им в работе.
 +И чтобы при изменении метода интерфейса не должны меняться клиенты, которые этот метод не используют.
 +
 +Пример.
 +
 +//ITransformer.php://
 +
 +<code>
 +interface ISuperTransformer
 +{
 +    public function toCar();
 +    public function toPlane();
 +    public function toShip();
 +}
 +</code>
 +
 +//transformers.php://
 +
 +<code>
 +class SuperTransformer implements ISuperTransformer {
 +    public function toCar(){
 +        echo 'transform to car';
 +    }
 +     
 +    public function toPlane(){
 +        echo 'transform to plane';
 +    }
 +     
 +    public function toShip(){
 +        echo 'transform to ship';
 +    }
 +}
 + 
 +class CarTransformer implements ISuperTransformer {
 +    public function toCar(){
 +        echo 'transform to car';
 +    }
 +     
 +    public function toPlane(){
 +        throw new Exception('i can`t transform to plane');
 +    }
 +     
 +    public function toShip(){
 +        throw new Exception('i can`t transform to ship');
 +    }
 +}
 +</code>
 +
 +Разбиваем на несколько интерфейсов.
 +
 +//ITransformer.php://
 +
 +<code>
 +interface ICarTransformer {
 +    public function toCar();
 +}
 + 
 +interface IPlaneTransformer {
 +    public function toPlane();
 +}
 + 
 +interface IShipTransformer {
 +    public function toShip();
 +}
 +</code>
 +
 +//transformers.php://
 +
 +<code>
 +class SuperTransformer implements ICarTransformer, IPlaneTransformer, IShipTransformer {
 +//...
 +}
 + 
 +class CarTransformer implements ICarTransformer {
 +    public function toCar(){
 +        echo 'transform to car';
 +    }
 +}
 +</code>
  
  
i.1646832573.txt.gz · Last modified: 2023/09/14 06:06 (external edit)