Что подразумевается под динамическим временем выполнения в шаблоне Designrator? - PullRequest
0 голосов
/ 27 октября 2018

Изучая более одной статьи о Decorator Design Pattern, я заметил, что все статьи рассказывают о Decorator, позволяющем нам динамически создавать дополнительные функции во время выполнения и динамически создавать объекты во время выполнения.

Я полностью понимаюШаблон декоратора, но я не понимаю, что подразумевается под «динамически», и если он не создан во время выполнения, как он создается?Мне нужен пример для иллюстрации.

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

Наследование - это первое решение, которое приходит на ум, когда вам нужно расширить классовое поведение.Однако наследование статично.Вы не можете добавлять новые подклассы в программу, когда она уже скомпилирована и выполнена. Ссылка

Третий вопрос : Мне нужна статья или описание дляНапример, это способ создания объекта во время выполнения или нет, и это способ создания динамически, и это не

Вопрос 4 : Как я могу различить, что этот код сделан ввремя выполнения или нет и динамически или нет?

Refs:

  1. Tutsplus
  2. Laracsts video
  3. Wiki

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Я должен указать, что Шаблон Decorator не Decoration, и я соответственно отредактировал текст.

Некоторые из классических шаблонов находят лучшие способы, чем наследование, для изменения поведения классов. Примеры: Strategy, Composite, Chain of Responsibility и, конечно, Decorator. Фактически 3 из вышеперечисленного работают, создавая связанные списки объектов, которые сотрудничают, чтобы сделать что-то «сложное», что было бы трудно, неэффективно, используя наследование. Используя шаблоны, вы можете создавать коллекции объектов для выполнения сложного поведения во время выполнения, объединяя / внедряя несколько объектов.

Смысл всего этого в том, что вы можете не знать во время компиляции, какое сложное поведение необходимо, и это может зависеть от входных данных, конфигураций и т. Д. Это требует гибкого способа создания экземпляров и объединения классов во время выполнения таким образом, чтобы было бы практически невозможно во время компиляции.

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

0 голосов
/ 28 октября 2018

Надеюсь, я смогу ответить на ваши 4 вопроса, просто показав разницу между оформлением (динамическим) и наследованием (статическим).

Наследование (статическое) = менее гибкий . Допустим, у вас есть класс B, который наследует класс A. Затем во время выполнения каждый экземпляр класса B будет использовать код класса A. Нет способа изменить это, когда программа работает. Чтобы изменить его, вы должны сделать это во время компиляции.

Декорирование (Динамическое) = более гибкий . Класс B не рассматривает класс A как родительский, а вместо этого A рассматривает как друга. Это часто достигается с помощью метода, называемого Внедрение зависимости : конструктор B получает объект, принадлежащий типу A. Если вы хотите создать экземпляр B, вы должны сначала создать экземпляр A или любого другого подкласса A и передать его конструктору B. Эта конструкция более гибкая, но и более сложная.

...