Согласно :h new-filetype
части B вы можете сделать что-то вроде следующего:
augroup txt_to_markdown
autocmd!
autocmd BufRead * if &filetype == 'text && getline(1) =~ '^title:' | set filetype=markdown | endif
augroup END
Это кажется, что Вы спрашиваете, существует ли "конкретно полезное" преимущество для использования шаблона разработки состояния, которому я сказал бы определенно да, особенно если Ваше приложение на самом деле полагается в большой степени на "состояние" своих объектов. Популярным каноническим примером является пример видеоплеера, который всегда находится в одном состоянии и может только перейти в различные состояния в зависимости от состояния, в котором это в настоящее время находится (например, это не может остановиться, если это уже останавливается, но это может играть, и это может перемотаться, и так далее).
В то время как тем конкретным примером можно управлять относительно легко с горсткой if/else/switch-type условий (если (isStopped ()), игра (), и т.д.), потому что нет то, что много состояний для контакта с, когда состояния или их правила перехода начинают становиться более многочисленными или сложными, шаблон состояния абсолютно, становятся довольно ценными, поскольку без него, код имеет тенденцию накапливать elseifs как сумасшедший, и вещи становятся все меньше и меньше читаемыми и управляемыми со временем.
Таким образом да, в целом, если Вы находите поведения своих объектов, варьирующиеся согласно их состояниям (если isStopped () игра () / elseif isPlaying () остановка () / elseif (isBroken () фиксируют ()), и т.д.), то да, действительно рассматривают использование шаблона состояния. Это - немного больше работы впереди, но обычно определенно стоящий усилия и сделанный правильно я сомневаюсь, что Вы заметили бы любые значительные издержки просто для использования его.
Направляйтесь Первые Шаблоны разработки предлагает замечательное описание, как и whys, также - я настоятельно рекомендую взятие, которые заказывают в значительной степени кому-либо пишущему объектно-ориентированный код.
Я должен не согласиться - полезные шаблоны разработки в стороне, этим конкретным примером является смешное излишество:
Мне не удается видеть, как это - улучшение - оно нарушает YAGNI1 и ASAP2, чрезмерно увеличивает размер кода и уменьшает эффективность (несколько объектов, которые инстанцируют, чтобы сделать задание при отсутствии требования).
Как интеллектуальное осуществление, мягко интересное. Как привычка программирования, ужасающая!;-)
2 как можно скорее = максимально простой
Это - очень полезная техника.
Вы не распространяете если (myState) операторы вокруг Вашего класса.
Можно расширить технику до многих состояний и только иметь для изменения то, что Вы присваиваете myState участнику.
Что касается производительности и использования памяти, ожидайте, пока у Вас нет чего-то для измерения - возможно, необходимо попробовать оба пути и измерить их обоих, когда они работают.
Состояние/стратегические модели пробуют и верно. Они не просто интеллектуальное осуществление. Если Вы думаете о производительности и использовании памяти, теперь... Вы, вероятно, стреляете себе в ногу. Доберитесь код... затем представляют.
Да, это работает и прохладно... в какой-то степени (точка, где это становится глупым). Можно даже использовать анонимные внутренние классы, если Вы должны, даже перечисления.