Шаблон команд Java против шаблона делегатов iPhone - PullRequest
5 голосов
/ 23 декабря 2010

Привет Я Java-разработчик, и в эти дни я также начал работать над разработкой для iphone. Мне было интересно, что шаблон команд Java в некоторой степени похож на шаблон делегатов в iphone или наоборот, потому что в обоих случаях кто-то еще выполняет работу для уполномоченного. Может ли кто-нибудь просветить меня в этом?

1 Ответ

7 голосов
/ 23 декабря 2010

Строго говоря, они разные, хотя и дополняют друг друга.

Command pattern - это инкапсуляция операции / запроса / действия как объекта. Хотя обычной причиной для инкапсуляции операции в виде объекта является отправка ее делегату, существует множество других причин, по которым вы можете захотеть использовать шаблон команды, например, создать механизм отмены или записать журнал аудита.

Delegate pattern - это наличие одной тени объекта за другой, чтобы поддерживать ее. Обычно это отношения 1: 1. В iPhone окно может иметь делегата окна. Окно может спросить делегата Window, как реагировать на определенные действия пользователя. Если различные пользовательские действия были автономными объектами, то они могли бы быть примером шаблона команды, но это отдельная идея от делегата Window.

Из того, что я понимаю (что, правда, очень мало), делегирование в модели Какао не использует объекты команд между делегатом и делегатом (хотя вызов метода иногда называют "сообщением" в ОО, говорят так, как это была действительная сущность).

Две идеи дополняют друг друга и часто используются вместе, но они являются отдельными идеями. Вы можете использовать шаблон команды без делегатов, а делегаты без объектов команд.


См:

http://en.wikipedia.org/wiki/Command_pattern

http://en.wikipedia.org/wiki/Delegation_pattern

http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/CocoaFundamentals/CommunicatingWithObjects/CommunicateWithObjects.html#//apple_ref/doc/uid/TP40002974-CH7-SW18

...