实现客户端提供的接口

时间:2015-04-28 15:33:53

标签: java interface client final

我有以下任务

public class Event {

    private final Integer id;
    private final Collection<Market> market;
    private final Boolean completed;

    public Event(Integer id,
            Collection<Market> market, Boolean completed) {
        this.id = id;
        this.market = market;
        this.completed = completed;
    }

    public Integer getId() {
        return id;
    }

    public Boolean getCompleted() {
        return completed;
    }
}

public class Market {


    private final Integer marketId;


    public Market(Integer marketId) {
        this.marketId = marketId;
    }

    public Integer getMarketId() {
        return marketId;
    }
}

public interface Client
{

    public void addEvent(Event event);

    /**
     * Update event status to completed. 
     */
    public void eventCompleted(Integer id);

    /**
     * Add market to an existing event
     */
    public void attachMarketToEvent(Integer id, Market market);

    /**
     * Remove market from an existing event
     */
    public void removeMarketFromEvent(Integer id, Market market);
}

我需要在不更改Event或Market类的情况下实现客户端。 怎么做?有任何想法吗?我可以实现它,但如果我改变这个最后的字段。 对我有什么期望?我真的很惊讶。

1 个答案:

答案 0 :(得分:1)

Event是不可变的。也就是说,一旦创建它就无法更改。查看Client接口,似乎唯一出现问题的方法是eventCompleted方法:

    /**
     * Update event status to completed. 
     */
    public void eventCompleted(Integer id);

看起来此方法希望您将completed的{​​{1}}标志更新为true,这是不可能的。

其他方法不会成为问题,因为它们不会修改Event的字段:

  1. Event:这应该不是问题,因为始终可以创建新事件
  2. addEvent(Event event)attachMarketToEvent(Integer id, Market market):这些不应该是一个问题,因为它们将用于向removeMarketFromEvent(Integer id, Market market)集合中添加新对象。
  3. 您需要回到期望您实施客户端的任何人并询问他们:如果market是不可变的,我如何更新completed字段?