Фреймворки используют абстрактные классы - Фабричный метод - PullRequest
1 голос
/ 25 января 2012

Из Addison Wesley - Шаблоны проектирования.

(метод Factory)

Каркасы используют абстрактные классы для определения и поддержания отношений между объектами.Фреймворк часто отвечает за создание этих объектов.

Что автор здесь подразумевает под приведенной выше цитатой?
Что представляет собой фреймворк и «как» он отвечает и за создание этих объектов?

Ответы [ 2 ]

0 голосов
/ 25 января 2012

Программная среда в мире ООП - это набор классов, которые предоставляют базовые функциональные возможности, которые программист может затем использовать и расширять для создания приложения.Давайте возьмем тривиальный пример рамок для разработки автомобилей.Он может иметь абстрактный класс, называемый автомобилем, который не реализует полный автомобиль, но может предоставить базовые методы для движения вперед, остановки и реверса.Может быть другой набор классов для колес.У автомобильных классов есть колеса (содержит отношения), и эти отношения могут быть определены в абстрактном автомобильном классе.Поэтому структура "поддерживает отношения между объектами".

Но для использования абстрактного автомобильного класса вам необходимо создать конкретный класс, например пикап Ford или спортивный автомобиль Ferrari.Здесь вы можете использовать шаблон фабричного дизайна для создания конкретных экземпляров этих типов транспортных средств.Фабричный класс создает конкретный экземпляр различных типов автомобилей для использования в рамках.Но во многих случаях фреймворку все равно, будь то Форд или Феррари, он просто хочет вызвать методы вперед, остановки и реверса.То, как они на самом деле реализованы (например, Ferrari может ускоряться намного быстрее, чем Ford), не имеет значения для структуры.Использование фабричного класса инкапсулирует эти детали из фреймворка.Когда говорится: «За создание этих объектов часто отвечает и фреймворк», он ссылается на тот факт, что фреймворк может предоставить базовую фабрику для автомобилей, которая может быть расширена для добавления ваших собственных конкретных реализаций автомобилей.

0 голосов
/ 25 января 2012

Это не тривиально обсуждать это на таком общем уровне.Я постараюсь.

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

Фреймворк вызывает методы экземпляров этих классов, которые вы несете ответственность за реализацию в вашем коде.

То есть в вашем коде вы будете расширять такие классы и "заполнять пробелы"".

Склейка между вашим кодом и кодом фреймворка - это контракт, определенный такими абстрактными классами (или интерфейсами, fwiw): фреймворк знает, что данный метод принимает параметры типа K и возвращает тип T,таким образом, можно безопасно вызывать его, предполагая, что его семантика будет соблюдаться разработчиком.

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

Надеюсь, он достаточно ясен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...