我希望能够跟踪用户在特定UI表单上执行的操作。
例如 - 用户从组合框中选择产品,填写文本字段等。 有些字段是有条件的,这意味着只有选择了某些先前的选项才会显示它们。
我希望能够在任何特定时刻跟踪他的选择 - 基本上我想要一个由用户在填写表单时所采取的单个事件组成的报告。
我想到了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 :(得分:1)
这个想法没问题,但对我而言,它看起来更像是Commands的列表。 Command pattern通常用于记住用户操作,然后可以在必要时轻松撤消。
“责任链”模式并不完全符合您的要求,因为您的Field
对象实际上并不需要对上一个和下一个元素的引用。您唯一需要的是用户执行的操作列表。因此,您不需要使用getNext()/ getPrevious()方法的Chain
接口。您基本上可以将所有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));