У меня есть следующий выпуск:
У меня есть декоратор для класса NSButtonCell
, который добавляет некоторые функции. Поскольку это декоратор - это подкласс NSButtonCell
. Мне не нравилось создавать подклассы, потому что одна и та же функциональность должна быть динамически добавлена \ удалена в некоторые другие подклассы NSButtonCell
. И, поскольку это декоратор, я должен направить все сообщения на украшенный объект, потому что у какого-то подкласса могут быть собственные «настройки», поведение и т. Д. Поскольку NSButtonCell
имеет много методов, я не могу писать код для перенаправления всех сообщений на оформленные объект. Пожалуйста, скажите, как я могу перенаправить все полученные сообщения на украшенный объект?Переслать все сообщения на другой объект
ответ
Использование NSProxy
- это стандартный подход для создания объектов, которые выступают в качестве резервных копий для других объектов или объектов, которые еще не существуют. Вся его структура основана на методах обработки и передает их истинному объекту.
Но, например, если бы я хотел бы реализовать образы draw-image: (NSImage *) с рамкой Frame: (NSRect) inView: (NSView *) controlView' в этом объекте декоратора? Как я должен рисовать? – Lexandr
Точка прокси-сервера - переадресация вызовов на реальный объект. Когда будет вызываться 'drawImage:'? Я бы подумал больше о 'drawRect:' вызывается и устанавливает параметры для реального класса или рисунка в текущий контекст (действительный во время 'drawRect:' call. – Wain
'DrawImage:' вызывается автоматически, когда кнопка перерисовывается. – Lexandr
Круглый пег встретить площади отверстия.
Причина, по которой вам так трудно это сделать, заключается в том, что она является чрезвычайно нестандартным шаблоном для реализации пользовательского интерфейса. Пересылка метода, реализованная либо forwardInvocation:
, либо NSProxy
, полезна, но практически никогда не используется для реализации шаблона Decorator в контексте пользовательского интерфейса.
В то время как вы можете использовать, используйте подкласс NSProxy, который избирательно пересылает или реализует методы, которые вам нужны, это полная трата кода по сравнению с просто созданием подкласса.
Просто используйте подкласс и сделайте с ним.
Однако, если вам действительно нужно, только подкласс. Если предоставленный NSButtonCell может делать все, что вам нужно, и это просто вопрос его настройки, затем настройте его в своем контроллере или в любом механизме, который вы используете для компоновки и представляете свой пользовательский интерфейс.
И в вашем случае это звучит как центральный контроллер или конфигуратор пользовательского интерфейса, так как это позволит централизовать функциональность в одно место, которое затем может управлять несколькими (потенциально минимальными подклассами) экземплярами различных классов пользовательского интерфейса.
- 1. Как перенаправить сообщения MFC на другой объект?
- 2. Переслать все сообщения в socket.io room
- 3. Linux Переслать все syslog
- 4. Переслать страницу github на другой адрес
- 5. Переслать экспресс js маршрут на другой сервер
- 6. Переслать все свойства элемента управления
- 7. Mod_rewrite переслать все параметры index.php
- 8. Переслать все параметры в JSP
- 9. Как проверить, все ли объект/строка ссылается на другой объект?
- 10. показать отдельные категории все сообщения на другой странице
- 11. телеграмма бот. Переслать сообщение в другой чат
- 12. Zend2 - как переслать другой контроллер модуля?
- 13. .htaccess файл - переслать все, но нет?
- 14. Переслать все сегменты маршрута Laravel в функцию
- 15. Переслать все запрос обработчику делегирования в MVC
- 16. Как узнать все сообщения, которые могут ответить на один объект?
- 17. Как переслать один URL на другой, используя правила mod_rewrite
- 18. Переслать запрос POST на другой URL с Silex?
- 19. Переслать UIGestureRecognizer с одного контроллера вида на другой контроллер представления
- 20. Найти и переслать базу данных mysql на другой компьютер
- 21. Переслать вызов веб-сервису на другой веб-сервис?
- 22. Как получить результаты от pyparsing Переслать объект?
- 23. Переслать вызов функции другой функции, не зная аргументов другой функции
- 24. Переслать все через SSL в приложении Express.js
- 25. Как переслать все 404 страницы на первую страницу?
- 26. Ссылка на другой объект
- 27. Переслать ответ на сообщение после добавления комментария
- 28. Переадресовать все сообщения на wordpress
- 29. Как изменить один объект на другой объект?
- 30. Все ссылки на объект
Вы посмотрели на 'NSProxy'? – Wain