2015-10-24 2 views
0

Я изучаю шаблоны дизайна, и есть некоторые вещи, которые я не понимаю. Например, я часто сталкивался с идеей скрытия реализации для клиента.Скрытие реализации клиенту

Например, в отношении заводского шаблона я читал, что логика приложения не должна знать подклассы пользовательского интерфейса, даже при создании.

Я не понимаю, почему скрытие реализации для клиента является преимуществом. Единственная причина, по которой я могу думать, - это простота. В самом деле, я думаю, в этом случае клиент должен знать только интерфейс, а не различные подклассы, чтобы использовать объекты, тем самым делая все проще, поскольку вам не нужно знать всю реализацию подклассов. Я прав?

Однако, я думаю, может случиться так, что вам нужно вызвать конкретный метод подкласса, и в этом случае вы вынуждены использовать подкласс для вызова метода.

Сказав это, я хотел бы задать вам следующие вопросы:

  1. Что идея «прячась конкретных классов или скрытие реализации для клиента в виду? В чем преимущество? Это просто вопрос простоты и обслуживания?

Кроме того, я хотел бы, чтобы вы дали мне совет по книгам и онлайн-ресурсам (теория и практика) по разработке программного обеспечения. Действительно, есть несколько аспектов этого, которые мне непонятно. А именно независимые объекты и программирование для интерфейса.

Спасибо за вашу помощь

+0

Похоже, это было бы лучше спросить здесь ... http://programmers.stackexchange.com/ – KornMuffin

+0

@KornMuffin при обращении к другим сайтам часто бывает полезно указать, что [перекрестная публикация неодобрительно] (http: //meta.stackexchange.com/tags/cross-posting/info) – gnat

+0

Подумайте о том, как управлять автомобилем.Все автомобили имеют более или менее стандартный интерфейс: ключ для разблокировки и запуска, управление, чтобы сказать, вперед или назад, управление для ускорения и управление для торможения. Теперь подумайте о том, сколько «конкретных реализаций» есть за этими интерфейсами? «Клиент» автомобиля, когда он работает, не должен знать, является ли это бензиновым/электрическим/гибридным двигателем или если двигатель охлаждается водой или воздухом и т. Д. Поскольку операторы используют одни и те же элементы управления, несмотря на различные реализации, автомобили взаимозаменяемы с операторами. – Fuhrmanator

ответ

1

Предположим, что вы работаете в компании А, и вы разработали API и сделал все, общественности. Другие разработчики компании в разных местах и ​​часовых поясах использовали ваш API для разработки собственных приложений. Ваш API используется сотнями других в 10 различных проектах. Поскольку ваш код используется во многих местах, вы хотели бы сделать его лучше. Вы разработали более быстрые алгоритмы и даже сократили строку кода на 20%. Вы счастливо совершили свой код в пятницу вечером и ушли. Когда вы придете в свой офис утром в понедельник, вы поймете, что вы нарушили кодекс всех остальных. Люди не могут скомпилировать свой код, потому что вы удалили или изменили код, от которого они зависят. Вы получите много злых сообщений и звонков, и в конечном итоге вам придется откатить ваш API до предыдущей версии.

Вот почему вам нужно скрыть свою реализацию. Как только он станет общедоступным, вы не сможете его изменить. Подумайте о том, что произойдет, если Google изменит имя метода или тип возврата метода в Android SDK. Они разбивают тысячи приложений. Между разработчиками API и пользователями всегда есть напряжение. Разработчики хотят скрыть все, и пользователи хотят получить доступ ко всему. Если вы выпустите очень маленький интерфейс, люди не будут использовать ваш API, если вы раскрываете множество деталей реализации, вы не сможете изменить свой код.

Пользователи API не должны беспокоиться или думать о конкретных классах. Это не их бизнес, он принадлежит разработчику API. Если вы хотите узнать об этом больше, вы можете прочитать «Эффективная Java» и «Книга шаблонов дизайна». Я рекомендую Head First Design Patterns.