一、eclipse californium开源项目实现uml类图

 二、示例:实现COAP协议客户端注册/更新/注销构造request

public interface ClientRequest {
    void accept(ClientRequestVistor vistor);
}
public class RegisterRequest implements ClientRequest {
    private String ip;
    private String port;
    private String endpoint;
    private long lt;

    public RegisterRequest(String ip, String port, String endpoint, long lt) {
        this.ip = ip;
        this.port = port;
        this.endpoint = endpoint;
        this.lt = lt;
    }

    public String getUrl() {
        return "coap://"+ip+":"+port+"/t/r?ep="+endpoint+"&lt=86400";
    }

    @Override
    public void accept(ClientRequestVistor vistor) {
        vistor.visit(this);
    }
}
public class UnRegisterRequest implements ClientRequest {
    private String ip;
    private String port;
    private String endpoint;

    public UnRegisterRequest(String ip, String port, String endpoint) {
        this.ip = ip;
        this.port = port;
        this.endpoint = endpoint;
    }

    public String getUrl() {
        return "coap://"+ip+":"+port+"/rd/" + endpoint;
    }

    @Override
    public void accept(ClientRequestVistor vistor) {
        vistor.visit(this);
    }
}
public class UpdateRequest implements ClientRequest {
    private String ip;
    private String port;
    private String endpoint;
    private long lt;

    public UpdateRequest(String ip, String port, String endpoint, long lt) {
        this.ip = ip;
        this.port = port;
        this.endpoint = endpoint;
        this.lt = lt;
    }

    public String getUrl() {
        return "coap://"+ip+":"+port+"/rd/" + endpoint +"?lt=86400";
    }

    @Override
    public void accept(ClientRequestVistor vistor) {
        vistor.visit(this);
    }
}

vistor接口与实现

public interface ClientRequestVistor {
    void visit(RegisterRequest registerRequest);

    void visit(UpdateRequest updateRequest);

    void visit(UnRegisterRequest unRegisterRequest);
}
public class CoapRequestBuilder implements ClientRequestVistor{
    private Request request;

    public Request getRequest() {
        return request;
    }

    @Override
    public void visit(RegisterRequest registerRequest) {
        request = Request.newPost();
        request.setPayload((byte[])null);
        request.getOptions().setContentFormat(MediaTypeRegistry.APPLICATION_OCTET_STREAM);
        request.setURI(registerRequest.getUrl());
    }

    @Override
    public void visit(UpdateRequest updateRequest) {
        Request request = Request.newDelete();
        request.setPayload((byte[])null);
        request.getOptions().setContentFormat(MediaTypeRegistry.APPLICATION_OCTET_STREAM);
        request.setURI(updateRequest.getUrl());
    }

    @Override
    public void visit(UnRegisterRequest unRegisterRequest) {
        Request request = Request.newPost();
        request.setPayload((byte[])null);
        request.getOptions().setContentFormat(MediaTypeRegistry.APPLICATION_OCTET_STREAM);
        request.setURI(unRegisterRequest.getUrl());
    }
}

main方法

public static void main(String[] args) {

  RegisterRequest registerRequest = new RegisterRequest("127.0.0.1", "5682", "111111111111111", 8640000);
  registerRequest.accept(new CoapRequestBuilder());
}