整个流程依赖三个环节:适配、发送、保存

发布时间:2021-08-01 00:14 来源:https://blog.51cto.com/sauron/ 阅读:136 作者:LinkedKeeper 栏目: 云计算 欢迎投稿:712375056

在实现MessageBodyService服务时,发现不同实现中,有着很多共性的一些,所以通过抽象类的方式,封装共性的,在具体的实现中,封装特性的。

抽象封装Message,以及组合Sender和Saver可以参见如下代码:

public class SamplerMessage implements Message {       private Sender sender;     private Saver saver;       private String jsonMessage;       private MessageSenderService messageSenderService;     private MessageBodyService messageBodyService;       public SamplerMessage(String jsonMessage, MessageSenderService messageSenderService, MessageBodyService messageBodyService) {         this.jsonMessage= jsonMessage;         // 封装service到Message         this.messageSenderService = messageSenderService;         this.messageBodyService= messageBodyService;     }       public Sender getSender() throws Exception {         sender = new SamplerSender(jsonMessage, messageSenderService, messageBodyService);         return sender;     }       public Saver getSaver() {         saver = new SamplerSaver(jsonMessage);         return saver;     } }

优化

针对如上问题,首先是通过组合的方式重新封装。

Message message = adapterService.adapter(jsonMessage); message.getSender().send(); message.getSaver().save();

之前和同事讨论这里,很形象的比如成,Sender像一张弓,Message像一支箭,getSender()可以获取不同的弓,Message也可以是不同的箭,通过不同的实现随意组合。

通过组合的方式,就可以在不改变外观行为的框架下,构造针对不同特定的具体实现。

二、这里以服务号消息(ServiceNoMessage)为例,SamplerMessage是Message的一种具体实现,其中SamplerSender和SamplerSaver分别是Sender和Saver的具体实现。

public class ServiceNoMessageBodyServiceImpl extends AbsMessageBodyService {       protected String generate() throws Exception {         ...     } }

免责声明:本站发布的内容(图片、视频和文字)以原创、来自本网站内容采集于网络互联网转载等其它媒体和分享为主,内容观点不代表本网站立场,如侵犯了原作者的版权,请告知一经查实,将立刻删除涉嫌侵权内容,联系我们QQ:712375056,同时欢迎投稿传递力量。