1. Принцип разделения интерфейсов (ISP: Принцип разделения интерфейсов)
Определение: лучше использовать несколько специализированных интерфейсов, чем один общий интерфейс. Также можно сказать: создавайте единый интерфейс, не создавайте раздутый интерфейс.
Два определения интернет-провайдера:
◇ «Клиентов не следует заставлять зависеть от интерфейсов, которые они не используют»
Клиент не должен полагаться на интерфейсы, которые ему не нужны.
◇ «Зависимость одного класса от другого должна зависеть от минимально возможного интерфейса»
Зависимость одного класса от другого класса должна основываться на наименьшем интерфейсе. (от клиента)
Интерфейсы и роли: понимание интерфейса как набора характеристик всех методов, предоставляемых классом. Таким образом, разделение интерфейсов приводит к разделению типов. Таким образом, интерфейс должен представлять только одну роль, а не обслуживать несколько ролей.
Загрязнение интерфейса. Так называемое загрязнение интерфейса добавляет к интерфейсу ненужные обязанности. Загрязнение интерфейса приведет к проблемам с обслуживанием и повторным использованием. Самая распространенная проблема заключается в том, что для повторного использования загрязненного интерфейса мы вынуждены реализовывать и поддерживать ненужные методы. Поэтому мы должны отделить клиентскую программу, а разделение клиентской программы означает разделение интерфейса.
Как реализовать отдельные интерфейсы:
Обычно существует два способа разделения интерфейсов:
1) Используйте делегирование для разделения интерфейсов. (Разделение посредством делегирования)
Просто делегируйте запрос классу реализации других интерфейсов для выполнения необходимых обязанностей, то есть шаблону адаптера (Adapter).
2) Используйте множественное наследование для разделения интерфейсов. (Разделение посредством множественного наследования.)
Этот метод реализует несколько интерфейсов для выполнения необходимых обязанностей.
Оба метода имеют свои преимущества и недостатки. Обычно нам следует сначала рассмотреть последний вариант и выбрать первый вариант, если требуется преобразование типов.
Эта статья взята из блога CSDN. При перепечатке указывайте источник: http://blog.csdn.net/scelong/archive/2009/12/18/5031030.aspx.
-