вы, вероятно, уже знакомы с шаблонами объектно-ориентированного проектирования, даже если вы этого еще не знаете

Скажем, вы покупаете новый дом.

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

На кухне не хватает лепнины. Электрическая розетка в столовой не работает. Внешний фонарь не работает.

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

Со временем она вызывает соответствующую команду для выполнения каждой команды за вас.

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

Это шаблон проектирования команды.

Тип шаблона проектирования команд:Поведенческий

Источник шаблона проектирования команд:Банда четырех

Шаблон проектирования команд в процедурном программировании

Будет добавлено позже.

Шаблон проектирования команд в разработке баз данных

Это коза.

Козы просматривают. Интернет-браузеры просматривают. Покупатели просматривают.

Если бы мы создавали систему, которая позволяла бы всем этим просматривать по-своему, нам нужно было бы абстрагироваться от понятия просмотра. Черт возьми, было бы лучше, если бы мы абстрагировали понятие просмотра обратно к простому старому «делать что-то».

Тогда у нас мог бы быть класс вызывающего, который просто знал бы о том, что он «что-то делает».

Что он будет делать, когда вы попросите его что-то сделать? Что ж, он выполнит команду «выполнить» для класса команд, который вы бы добавили в очередь вызывающего с помощью метода store_command вызывающего.

Но вы не стали бы хранить_команду в классе Command, так как команда была бы абстрактным классом. Вы бы сохранили store_command в классе ConcreteCommand, у которого есть метод execute и дополнительный необязательный метод outputname.

Класс Goat, класс Browser и класс Shopper будут иметь те же методы, что и ConcreteCommand, поэтому вы можете поместить их вместо ConcreteCommand при передаче его вызывающей стороне.

Goats, Browser и Shoppers, все из которых знают, как просматривать, будут затем просматривать, когда вызывающая сторона вызывает свой метод execute.