将get方法与寄存器Observer方法结合使用

时间:2011-06-07 20:09:11

标签: java design-patterns observer-pattern

我正在编写一个使用观察者模式的应用程序。客户端类需要知道Employee对象的状态何时更改。它还需要知道当前员工的状态(在进行任何更新之前)。目前我正在使用getEmployee()方法,然后注册一个员工观察员:

public class MyClass implements EmployeeObserver{

 ...

 Employee employee= subjectClass.getEmployee();

 subjectClass.registerEmployeeObserver(this);

 ... 

}

组合这些方法是否有任何问题,以便在观察者注册的同一方法调用中返回Employee对象? :

Employee employee = subjectClass.getAndObserveEmployee(this);

我知道这看起来有点奇怪,但是我只需要在初始化观察者类时使用getEmployee方法,并且subjectClass已经有了一个我希望保持最小的大型接口。那么,将两个动作组合成单个方法调用是否可以接受或是不好的做法?

2 个答案:

答案 0 :(得分:0)

将两者分开是比较干净的。

另外,为什么Employee本身没有addObserver()方法?可能有一个完全正确的理由,但如果我正在搜索它,那将是我第一次猜到在哪里找到它。要么管理员工,要么有addObserver(int employeeIdToObserver)或类似的事情(暗示您在观察员工之前已经有了对员工的引用。)

此外,您可以编写模式的一种方法是......

public interface EmployeeObserver {

    public void stateChanged(State oldState, State newState);

} 

...对于需要知道改变前的状态是什么的观察者。

答案 1 :(得分:0)

如果有时您不需要该员工

subjectClass.getAndObserveEmployee(this);

看起来很奇怪。或者如果有时你需要雇员而不是注册:

Employee employee = subjectClass.getAndObserveEmployee(null);  

再次不好。如果,假设您要更改register部分(即另外一个arg),则必须仅为get()更改您使用该函数的位置。 我不会这样做,除非必要,如

oldVal = ConcurrentMap.replaceValue();

在这种情况下,两个操作必须在一个方法中组合,因为在两个调用之间的并发系统中,状态可以改变。