|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
[+1 16.03.13]
[+1 22.03.13] Регистрация: Dec 2012
Сообщений: 100
|
Цитата:
Состоит из следующих компонентов: package { //State Machine Interface // Интерфейс автомата состояний interface State { function startPlay():void; function stopPlay():void; } } package { //Context class // Контекстный класс class VideoWorks { var playState:State; var stopState:State; // Переменная для хранения текущего состояния var state:State; public function VideoWorks() { trace("Video Player is On"); playState = new PlayState(this); stopState = new StopState(this); state = stopState; } public function startPlay():void { state.startPlay(); } public function stopPlay():void { state.stopPlay(); } // Методы получатели и установщики public function setState(state:State):void { trace("A new state is set"); this.state = state; } public function getState():State { return state; } public function getPlayState():State { return this.playState; } public function getStopState():State { return this.stopState; } } } package { //Play State // Класс контекстного состояния: состояние проигрывания class PlayState implements State { var videoWorks:VideoWorks; public function PlayState(videoWorks:VideoWorks) { trace("--Play State--"); this.videoWorks = videoWorks; } public function startPlay():void { trace("You're already playing"); } public function stopPlay():void { trace("Stop playing."); videoWorks.setState(videoWorks.getStopState()); } } } package { //Stop State; // Класс контекстного состояния: проигрывание остановлено class StopState implements State { // Доступ к методам установщикам и получателям для каждого состояния var videoWorks:VideoWorks; public function StopState(videoWorks:VideoWorks) { trace("--Stop State--"); this.videoWorks = videoWorks; } public function startPlay():void { trace("Begin playing"); videoWorks.setState(videoWorks.getPlayState()); } public function stopPlay():void { trace("You're already stopped"); } } } |
|
|||||
Есть такой паттерн "состояние", да
Наверно делать с его помощью проигрыватель - не самая худшая идея - да. Но куда Вы его в систему отмены/повтора впихнуть предлагаете?! В редакторе есть еще непосредственно система редактирования, т.е. определения действий - там да, для переключения инструментов, состояния процесса редактирования всяко лучше свичей построить набор состояний. Но здесь то речь про _применение_ и _отмену_ этих изменений. Хочется видеть то не копипасту канонического примера из книги, а пример использования в данной задаче. |
|
|||||
[+1 16.03.13]
[+1 22.03.13] Регистрация: Dec 2012
Сообщений: 100
|
Цитата:
|
|
|||||
Цитата:
Я к чему это всё написал: - Вы процитировали все мои слова про состояние редактируемых данных/графики (_не_ редактора!), про его откат, про продходы сохранения изменений и сохранения всего состояния данных применительно к откатам. - Потом привели пример паттерна "состояние" очень похожий на пример из книги "ActionScript 3.0. Шаблоны проектирования". - Как применить этот шаблон к откатам совершенно не понятно - Поэтому хочется увидеть как паттерн состояние работает внутри системы откатов/повторов (мне чисто из-за любопытства - ибо задачи в данный момент построить редактор не стоит) Или Вы имели в виду только "переключение инструментов"? |
|
|||||
Modus ponens
|
На мой взгляд, самый надежный вариант позволяющий и усложнятся и макросы писать, и вообще переводит работу с редактором на новый уровень... это когда команды редактор выполняет не непосредственно, а через прослойку интерпретируемого языка (для сравнения, Vim и Emacs так примерно работают, CAD / Photoshop - похоже).
В таком случае пользователь работая с редактором пишет программу, которую потом можно и воспроизвести, и сохранить, или, например, есть вот такая штука (использую, очень нравится): http://www.emacswiki.org/emacs/UndoTree (т.е. можно хранить одновременно несколько веток изменений и потом выбирать какую именно использовать - гораздо круче, чем, когда один шаг undo + новая команда затирают десяток undo сделанных до того).
__________________
Hell is the possibility of sanity |
|
|||||
Цитата:
Если макросы пользователю редактора не нужны, то какой в этом смысл? Цитата:
Хотя есть - скопипастить оттуда-отсюда. |
|
|||||
Modus ponens
|
В чем смысл:
Я вот сейчас "прохожу перепрофилировку" в "на все руки мастер (но восновмом, Руби, наверное, хочется верить, возможно, но пока нет, а в оставшееща время ПХП / АСП классик / Жабоскрипт и прилагающаяся муть)". Возникают два типа штатных ситуаций: - ХТМЛ - очень предательская технология, с напрочь отсутствующей логикой, где сносный результат достигается только бесконечным повтором попыток и ошибок. Работая с файлом приходитыся очень часто делать несколько изменений - потом проверять, потом недомуветь от результатов, потом возвращаться и переделывать, и так по многу раз. (Сегодня пару часов убил пытаясь понять почему у кнопки два раза срабатывает onclick - оказалось label рядом с кнопкой диспатчил каким-то образом событие в соседнюую кнопку... - Жабоскрипт "программисты", наученные горьким опытом даже не ищут логику в происходящем, а руководствуются "джаваскрипт чутьем", которе им подсказывает, что и где поменять, чтобы "заработало". Иногда приходится просить помощи у старшего товарища, а потом, после того как "заработало", откатывать множество бесполезных изменений сделанных старшим товарищем. ЗЫ. Мержить можно: ediff - сразу же и мержит, но до такой степени не доходило, пока.
__________________
Hell is the possibility of sanity |
|
|||||
[+1 16.03.13]
[+1 22.03.13] Регистрация: Dec 2012
Сообщений: 100
|
Цитата:
Если вам всётаки интересно моё мнение каким образом я вижу данную реализацию в шаблоне: В данном случае я вижу два состояния: 1. Переход на следующее дествие 2. Переход на предыдущее действие А в качестве вспомогательного класса можно использовать класс реализованный на основе шаблона "Декоратор". Как вы помните из книжечки Декоратор добавляет объекту обязанностей. Он упаковывает его в свою новую функциональность и свойства, в то время как внутрення структура объекта остаётся неизменной. Таким образом я предлагаю своего рода упаковывать каждое действие в новое действие, а чтобы не возникло путаницы является ли это новым действием или отменой действий, за это как раз и будет отвечать основная реализация Состояния. |
|
|||||
Знатно троллите expl
|
|
|||||
[+1 16.03.13]
[+1 22.03.13] Регистрация: Dec 2012
Сообщений: 100
|
Напрасно вы так думаете, с моей стороны - вполне конструктивный совет. А способ его релизации уже зависит от фантазии и понимании самих шаблонов.
Я считаю as3 достаточно гибким языком, потому как можно реализовать сию конструкцию не только расширением наследования классов и расширением реализации интерфейсов, но и передачи самого класса в экземпляр другого класса посредством ключевого слова this |
Часовой пояс GMT +4, время: 15:42. |
|
« Предыдущая тема | Следующая тема » |
|
|