Принцип сегрегации интерфейса, принцип изоляции интерфейса интерфейса ISP выступает, что использование нескольких выделенных интерфейсов лучше, чем использование одного общего интерфейса.
Зависимость одного класса от другого класса должна быть установлена на самом маленьком интерфейсе.
Интерфейс представляет роль, и различные роли не должны передаваться на интерфейс. Несвязанные интерфейсы объединяются вместе, чтобы сформировать раздутый большой границу раздела, что является загрязнением роли и раздела.
«Клиенты не должны быть вынуждены полагаться на методы, которые они не используют. Интерфейсы принадлежат клиентам, а не к классовой иерархии, в которых они находятся». Это очень ясно. Проще говоря, не заставляйте клиентов использовать методы, которые они не используют. Если пользователи вынуждены использовать методы, которые они не используют, то эти клиенты столкнутся с изменениями, вызванными изменениями в этих методах, которые они не используют.
В случае использования предоставьте методы, необходимые вызывающим абоненту, и блокируйте ненужные методы. Он соответствует принципу изоляции интерфейса. Например, в системе электронной коммерции есть три места, которые будут использоваться в категории заказов.
Согласно принципу изоляции интерфейса (ISP), зависимость одного класса от другого класса должна быть установлена на самом маленьком графике.
То есть для портала он может полагаться только на интерфейс с методом запроса.
Структура UML выглядит следующим образом:
Давайте посмотрим на пример написания интерфейса Java, который игнорирует принцип изоляции интерфейса:
Интерфейс i {public void method1 (); public void method2 (); Public Void Method3 (); public void method4 (); Public Void Method5 (); } класс a {public void Devent1 (i i) {i.method1 (); } public void devence2 (i i) {i.method2 (); } public void DEVELECT3 (i I) {i.method3 (); }} класс B реализует i {public void method1 () {System.out.println ("method1" для реализации интерфейса I ");} public void method2 () {system.out.println (" Метод 2 класса B реализует интерфейс I ");} public void method3 () {System.out.println (" метод 3 из класса B Interfere 3 () {system.out.println ("Метод 3 из класса B interface I); Метод 4 и метод5 не требуются, но в процессе реализации есть два метода, даже если тел метода этих двух методов пуст, эти два метода должны быть реализованы. } public void DEVELECT3 (i I) {i.method5 (); } // Для класса D, метода2 и метода3 не требуются, но поскольку в границе раздела A, // есть эти два метода, //, даже если тело метода этих двух методов является пустым в процессе реализации, эти два метода, которые не имеют эффекта, должны быть реализованы. public void method2 () {} public void method3 () {} public void method4 () {System.out.println ("Метод 4 класса D реализует интерфейс I"); } public void method5 () {System.out.println ("Метод 5 из класса D реализует интерфейс I"); }} public class client {public static void main (string [] args) {a a = new a (); A.Depend1 (new B ()); a.depend2 (new b ()); a.depend3 (new b ()); C C = новый c (); C.Depend1 (new D ()); c.depend2 (new d ()); c.depend3 (new d ()); }} Можно видеть, что если интерфейс слишком раздут, если методы появляются в интерфейсе, независимо от того, полезны ли они для классов, которые зависят от него, эти методы должны быть реализованы в классе реализации. Это, очевидно, не хороший дизайн. Если этот дизайн изменен в соответствии с принципом изоляции интерфейса, интерфейс I должен быть разделен. Здесь мы разделили исходный интерфейс I на три интерфейса. Дизайн разделения показан на рисунке ниже:
Как обычно, опубликуйте код программы для ссылки для друзей, которые не знакомы с диаграммой классов:
Интерфейс i1 {public void method1 (); } интерфейс i2 {public void method2 (); Public Void Method3 (); } интерфейс i3 {public void method4 (); Public Void Method5 (); } класс a {public void Devent1 (i1 i) {i.method1 (); } public void DEVELECT2 (i2 i) {i.method2 (); } public void DEVELECT3 (i2 i) {i.method3 (); }} класс B реализует i1, i2 {public void method1 () {System.out.println ("Метод 1 из класса B реализует интерфейс I1"); } public void method2 () {System.out.println ("Метод 2 из класса B реализует интерфейс i2"); } public void method3 () {System.out.println ("Метод 3 из класса B реализует интерфейс i2"); }} класс C {public void Devent1 (i1 i) {i.method1 (); } public void DEVELECT2 (i3 i) {i.method4 (); } public void DEVELECT3 (i3 i) {i.method5 (); }} класс D реализует i1, i3 {public void method1 () {System.out.println ("Метод 1 из класса D реализует интерфейс i1"); } public void method4 () {System.out.println ("Метод 4 из класса D реализует интерфейс i3"); } public void method5 () {System.out.println ("Метод 5 из класса D реализует интерфейс i3"); }} Значение принципа изоляции интерфейса: установить один интерфейс, не устанавливать огромный и раздутый интерфейс, пытайтесь уточнить интерфейс и попытаться меньше методов на границе. Другими словами, нам нужно установить выделенный интерфейс для каждого класса, вместо того, чтобы пытаться установить огромный интерфейс для всех классов, которые зависят от его вызова. В этом примере принцип изоляции интерфейса принимается при изменении огромного интерфейса на три выделенных интерфейса. При программировании полагаться на несколько выделенных интерфейсов является более гибким, чем полагаться на один комплексный интерфейс. Интерфейсы - это «контракты», установленные для внешних настроек во время проектирования. Определяя несколько интерфейсов, можно предотвратить распространение внешних изменений, а гибкость и обслуживание системы могут быть улучшены.
Говоря об этом, многие люди будут чувствовать, что принцип изоляции интерфейса очень похож на предыдущий принцип единственной ответственности, но это не так. Во -первых, принцип единой ответственности фокусируется на обязанностях; в то время как принцип изоляции интерфейса фокусируется на изоляции зависимости от интерфейса. Во -вторых, принцип единой ответственности - это в основном классы ограничений, за которыми следуют интерфейсы и методы, которые направлены на реализацию и детали в программе; в то время как принцип изоляции интерфейса в основном ограничивает интерфейсные интерфейсы, в основном нацеленный на абстракцию и направлен на построение общей программы.
При использовании принципа изоляции интерфейса для ограничения интерфейсов следует обратить внимание на следующие точки:
Интерфейс должен быть максимально небольшим, но он должен быть ограничен. Рафинирование интерфейса может повысить гибкость программирования, это факт, что он не является прибыльным, но если он слишком мал, это вызовет слишком много интерфейсов и усложняет дизайн. Так что это должно быть умеренным.
Индивидуальные услуги для классов, которые зависят от интерфейсов, только те методы, которые он должен подвергаться воздействию призванного класса, и методы, которые он не нуждается, скрыты. Только сосредоточив внимание на предоставлении индивидуальных услуг для модуля, вы можете установить минимальные отношения зависимости.
Улучшить сплоченность и уменьшить внешние взаимодействия. Используйте наименьшее количество интерфейса, чтобы достичь большинства вещей.
При использовании принципа изоляции интерфейса он должен быть умеренным. Нехорошо иметь слишком большой или слишком маленький дизайн интерфейса. При проектировании интерфейсов, только потратив больше времени на размышление и планирование, этот принцип может быть точно практиковаться.