我想为消息发送者创建流畅的 API。让我们举个简单的例子。
messageSender.newMessage()
.withSomeField("some value")
.withAnotherField("some value")
.publish();
我有课程
messagePublisher
和message
。 messagePublisher
有方法publish(message)
。我如何将这一切包装在一起以实现如上所述的流畅方式?
我提出了解决方案,其中我有类“messageSender”,其中包含“messagePublisher”的实例并使用它来发布消息。当我调用
messageSender.newMessage()
时,它将返回 messageBuilder
,但是这个 messageBuilder
需要引用 messageSender,所以我能够调用publish() 方法。我不喜欢messageBuilder
尊重messageSender
,但我不知道如何以不同的方式做到这一点。
预先感谢您的任何帮助或建议!
您可以使用 MessageSender 的内部类:
MessageSender.java:
public class MessageSender {
private MessagePublisher messagePublisher;
public void setPublisher(MessagePublisher publisher) {
this.messagePublisher = publisher;
}
public static void main(String[] args) {
MessageSender messageSender = new MessageSender();
messageSender.setPublisher(new MessagePublisher());
messageSender.newMessage()
.withDestination("DEST")
.withMsg("message")
.publish();
}
public MessageBuilder newMessage() {
return new MessageBuilder();
}
class MessageBuilder {
private Message message = new Message();
public MessageBuilder withMsg(String msg) {
message.setMsg(msg);
return this;
}
public MessageBuilder withDestination(String destination) {
message.setDestination(destination);
return this;
}
public void publish() {
messagePublisher.publish(message);
}
}
}
MessagePublisher.java:
public class MessagePublisher {
public void publish(Message message) {
System.out.println(
String.format(
"Message to be sent: Msg=%s, Dest=%s",
message.getMsg(),
message.getDestination()
)
);
}
}
Message.java:
public class Message {
private String msg;
private String destination;
public void setMsg(String msg) {
this.msg = msg;
}
public void setDestination(String destination) {
this.destination = destination;
}
public String getMsg() {return this.msg;}
public String getDestination() {return this.destination;}
}