2013-04-10 5 views
1

Я хотел бы иметь возможность отслеживать действия, которые пользователь делает в определенной форме пользовательского интерфейса.Как отслеживать изменения в форме пользовательского интерфейса?

Например, пользователь выбирает продукт из поля со списком, заполняет текстовое поле и т. Д. Некоторые поля являются условными, что означает, что они становятся видимыми только при выборе некоторых предыдущих вариантов.

Я хочу, чтобы иметь возможность отслеживать его выбор в любой момент - в основном, мне нужен отчет, состоящий из отдельных событий, которые пользователь принял при заполнении формы.

Я подумал о варьировании Chain of Responsibility шаблона:

public interface Chain{ 
    setNextChain(Chain next); 
    getNextChain(); 
    setPrevChain(Chain prev); 
    getPrevChain(); 
} 

public class Field implements Chain { 
     // All of the chaining implementation... 
     // All of the Action's members... 
     private string[] actionData; 
    } 

public class Product extends Field{ 
     // old Product logic integrated within the chain... 
    } 

public class AdName extends Field{ 
     // old Product logic integrated within the chain... 
    }  

Не уверен, что ли правильный подход, и был бы признателен за ваши мысли по поводу дизайна.

+0

Я думаю, что вы ищете шаблон Builder –

ответ

1

Идея в порядке, но для меня это больше похоже на список Commands. Command pattern часто используется для запоминания действий пользователя, которые при необходимости можно легко отменить.

Образец шаблона «цепочка ответственности» не совсем то, что вам нужно здесь, потому что ваши объекты Field на самом деле не нуждаются в ссылке на предыдущий и следующий элементы. Единственное, что вам нужно, список действий, которые выполняет пользователь. Из-за этого вам не нужен интерфейс Chain с методами getNext()/getPrevious(). Вы можете хранить все Field экземпляров в List и перемещаться по списку вперед/назад.

interface Command { 
} 

class ProductSelection implements Command { 
    Product selectedProduct; 
} 

class AdNameSelecton implements Command { 
    String selectedAdName; 
} 

List<Command> actions = new ArrayList<Command>(); 

// when user selects product 
actions.add(new ProductSelection(product)); 
// when user selects ad name 
actions.add(new AdNameSelection(name)); 
Смежные вопросы