PropertyChangeListener用法检查

时间:2017-04-05 21:48:05

标签: java

晚上好,

我为我的一个项目编写了两个非常简单的类。这是我第一次遇到这样的问题,所以我想问你是否能够以正确的方式解决问题/实施良好。

背景非常简单:您有一个可能忙碌或不忙的频道。如果频道忙,则表示它是由ServiceRequest拍摄的。处理完请求后,Channel应再次打开。

我google了一下,发现了使用PropertyChangedListener的想法。代码如下。请在这里给出关于代码质量/问题解决的所有评论。谢谢!

测试:

@Unroll
def "when request is processed and finished channel is free again"() {
    given:
    def channel = new Channel()
    def request = new ServiceRequest()
    request.addPropertyChangeListener(channel)
    when:
    channel.setRequest(request)
    request.finish();
    then:
    assert !channel.isBusy() && channel.request == null
}

频道类:

public class Channel implements PropertyChangeListener{

private boolean busy;
private ServiceRequest request;

public Channel() {
    this.busy = false;
}

public boolean isBusy() {
    return busy;
}

public ServiceRequest getRequest() {
    return request;
}

public void setRequest(final ServiceRequest request) {
    this.request = request;
    busy = true;
}

@Override
public void propertyChange(PropertyChangeEvent evt) {
    request = null;
    busy = false;
}

ServiceRequest类:

public class ServiceRequest {

PropertyChangeSupport support = new PropertyChangeSupport(this);

private String id;

public ServiceRequest() {
    id = "randomlygeneratedid";
}

void addPropertyChangeListener(final PropertyChangeListener l) {
    support.addPropertyChangeListener(l);
}

public void finish() {
    id = "";
    support.firePropertyChange("id", id, "");
    support.firePropertyChange("request", null, null);
    support.firePropertyChange("busy", null, false);
}

public String getId() {
    return id;
}

0 个答案:

没有答案