1

我希望能够跟踪用户在特定 UI 表单上所做的操作。

例如 - 用户从组合框中选择产品、填写文本字段等。有些字段是有条件的,这意味着它们只有在选择了一些先前的选项时才可见。

我希望能够在任何给定时刻跟踪他的选择 - 基本上我想要一份由用户在填写表格时采取的单个事件组成的报告。

我想到了责任链模式的一种变体:

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...
     }     

不确定这是否是正确的方法,并且会感谢您对设计的想法。

4

1 回答 1

1

这个想法没问题,但对我来说它看起来更像是一个Commands列表。命令模式通常用于记住用户操作,然后可以在必要时轻松撤消。

“责任链”模式并不是您在这里所需要的,因为您的Field对象实际上并不需要对前一个和下一个元素的引用。您唯一需要的是用户执行的操作列表。因此,您不需要Chain带有 getNext()/getPrevious() 方法的接口。您基本上可以将所有Field实例保存在 a 中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));
于 2013-04-10T14:10:12.847 回答