2015-01-06 2 views
1

В моем приложении все выполняемые операции находятся на выбранном в данный момент объекте, что заставляет меня думать, что шаблон государственного образца лучше всего подходит. Однако все объекты, которые выбираются один за другим, по существу одинаковы, поэтому в каждом состоянии действительно нет разницы, за исключением того, что элемент просто другой.Является ли шаблон прокси или государственного образца или, возможно, шаблон итератора более подходящим в этом случае?

Моя ситуация очень похожа на структуру каталогов. У меня есть коллекция папок, где каждая папка может иметь разные файлы, но она по-прежнему является папкой. Независимо от выбранной папки пользователь может видеть только содержимое этой папки или добавлять файлы. Моя программа также выполняет итераторы через все папки (предполагают один уровень) и показывает содержимое всех файлов в папке.

Я смущен, как мне сохранить текущее состояние (= текущая выбранная папка) в моем приложении?

надстроек

Что же смущает меня это следующее состояние логика которого я не знаю, где она принадлежит. Пожалуйста, предположите, что я работаю со специальными папками My Documents, My Pictures и My Music. Логика перехода (для простоты) заключается в том, что если пользователь добавляет 10 файлов в любую из этих папок или общий размер каждой папки превышает 10 МБ, он должен перейти к следующей папке. Кроме того, приложение должно сначала показать My Documents, чем переход на My Pictures, а затем переход на My Music. Вот почему я думал об этом как о состоянии, так как каждая папка должна знать, в какую папку она должна будет перейти.

+1

Уверен, звучит для меня, как будто «итератор» является более подходящей абстракцией здесь. –

+0

@JerryCoffin Я добавил дополнительную информацию, вы думаете, что «итератор» - еще более подходящий шаблон? спасибо – zar

+1

Может быть больше вопросов, но не очень много. Итератор обычно представляет некоторое состояние (текущую позицию) вместе с чем-то, что определяет «следующую позицию», а также способность определять, когда итерация должна прекратиться. Я ничего здесь не вижу, что отходит от этой базовой модели поведения. –

ответ

0

Вы можете использовать комбинацию состояния и шаблон итератора. Если состояния объекта просты, вы можете реализовать шаблон состояния, просто используя некоторые перечисления, представляющие состояние папки, например OPEN или CLOSED. Итератор помогает вам поддерживать & доступ к папкам в общем виде.

+0

Кажется, что «итератор» самостоятельно не выполняет эту работу, потому что он не может отличить один объект от другого, поэтому мне нужно будет создать состояние, но как использовать состояние с итератором? – zar

Смежные вопросы