1. Определение
По соглашению, давайте сначала рассмотрим определение принципа разделения интерфейса.
Зависимости между классами должны быть установлены вминимальный интерфейсначальство.
Методов в интерфейсе должно быть как можно меньше, и не делать интерфейс слишком раздутым, и не иметь много неактуальных логических методов.
чем-то похож наПринцип единой ответственности, все функции максимально просты и едины, и не дублируют слишком много других неактуальных.
Принцип единой ответственности в основном относится к классам и методам, а принцип разделения интерфейсов — к интерфейсам.
2. Сцена
Повар моет посуду, повар готовит.
Шеф-повар в томатном ресторане, босс с давним шеф-поваром в будущем.
Босс: В последнее время наш томатный ресторан был хорошо принят, и блюда вкусные.Я должен поблагодарить вас, шеф-повар.
Шеф: Да, благодаря мне.
Босс: А? Уверен?
Шеф-повар: Еще нет, я еще не закончил, спасибо... наш босс Хао, на этот раз это подтверждено. (холодный пот)
Босс: Ваше желание выжить удивительно, это потрясающе. Но сейчас, с увеличением клиентов, рабочей силы снова не хватает, а поваров набирать уже точно поздно, есть ли у вас хорошие решения?
Шеф-повар: У меня действительно есть способ, мы можем нанять несколько поваров, и повара должны быть лучше.
Босс: Но кухня Сяочу недостаточно вкусная, и клиентов легко потерять.
Шеф-повар: Шеф-повар не готовит, и шеф-повар отвечает только за мытье овощей. Таким образом, шеф-повару не нужно мыть посуду, а он отвечает только за приготовление пищи, поэтому эффективность возрастает.
Босс: Ты не хочешь помыть овощи?
Шеф: Конечно нет, я, то есть ради компании.
Босс: Хорошо, да, давайте набирать.
3. Код
прежде чем мы былиПринцип инверсии зависимостиболталипрограммирование интерфейса, поэтому сначала мы определяем интерфейс шеф-повара.
package com.fanqiekt.principle.segregation;
/**
* 厨师接口
*
* @author 懒人
*/
public interface IChef {
/**
* 洗菜
*/
void wash();
/**
* 做饭
*/
void cooking();
}
Повара делают две вещи: одна моет посуду, а другая готовит.
Далее напишем код шеф-повара, и шеф-повар реализует интерфейс шеф-повара.
Шеф-повар готовит, но не моет посуду.
package com.fanqiekt.principle.segregation;
/**
* 大厨
*
* @author 懒人
*/
public class BigChef implements IChef {
/**
* 洗菜的逻辑与大厨无关
*/
@Override
public void wash() {
}
@Override
public void cooking() {
System.out.println("大厨做饭");
}
}
Напишем о части шеф-повара, которая также реализует интерфейс шеф-повара.
Шеф-повар не готовит, повар только моет овощи.
package com.fanqiekt.principle.segregation;
/**
* 小厨
*
* @author 懒人
*/
public class Kitchen implements IChef {
@Override
public void wash() {
System.out.println("小厨洗菜");
}
/**
* 做饭的逻辑与小厨无关
*/
@Override
public void cooking() {
}
}
Этот способ письма, это хорошо?
Конечно это нехорошо, у каждого класса есть избыточные методы, которые с ним не связаны. Например, способ стирки в BigChef, способ приготовления в Kitchen.
Чем вызвано это явление?
Интерфейс недостаточно минимизирован. Принцип изоляции интерфейса призван решить эту проблему.
Мы можем написать два интерфейса: один — для приготовления пищи, а другой — для мытья овощей.
package com.fanqiekt.principle.segregation;
/**
* 做饭接口
*
* @author 懒人
*/
public interface ICook {
/**
* 做饭
*/
void cooking();
}
Интерфейс для приготовления пищи.
package com.fanqiekt.principle.segregation;
/**
* 洗菜接口
*
* @author 懒人
*/
public interface IWash {
/**
* 洗菜
*/
void wash();
}
Интерфейс для мытья посуды.
Давайте взглянем на конкретные классы реализации, соответствующие принципу изоляции интерфейса.
package com.fanqiekt.principle.segregation;
/**
* 大厨
*
* @author 懒人
*/
public class BigChef implements ICook{
/**
* 大厨只负责做饭,只处理和做饭相关的逻辑
*/
@Override
public void cooking() {
System.out.println("大厨做饭");
}
}
Таким образом, нет избыточного кода.
package com.fanqiekt.principle.segregation;
/**
* 小厨
*
* @author 懒人
*/
public class Kitchen implements IWash {
/**
* 小厨只负责洗菜,只处理和洗菜相关的逻辑
*/
@Override
public void wash() {
System.out.println("小厨洗菜");
}
}
Chef также не имеет избыточного кода.
Разве этот способ письма не более элегантен?
Если вы добавите тип шеф-повара, который и моет, и готовит, то вы можете реализовать интерфейсы ICook и IWash одновременно.
3. Преимущества
Он похож на принцип единой ответственности, и его преимущества аналогичны.
уменьшить рискИзменение одной из служб не повлияет на службы.
Простота обслуживания и расширенияБез избыточного кода интерфейс, соответствующий принципу изоляции интерфейсов, будет легче расширять и поддерживать.
4. Хип-хоп говорит
Далее, пожалуйста, наслаждайтесьОригинальная песня о принципе разделения интерфейса.
嘻哈说:接口隔离原则
作曲:懒人
作词:懒人
Rapper:懒人
奋斗了多年总算熬成了大厨才不要关心洗菜
这些琐事都摘不掉
刚入行一两年但兢兢业业的小厨还不到烹饪大菜
因为这些来不了
所以接口功能太多在胡闹
接口功能应该尽可能最少
这就是接口隔离
核心思想就是接口最小
这样才结构得体
风险降低易扩展维护也有格局
用起来它是绝对合理
Прослушивание, пожалуйста, нажмите здесь
Когда мне нечего делать и слушать музыку, знания наполняют мой разум;
Не следует недооценивать изучение новых способов ношения наушников.