一、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+"<=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());
}