在实现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 { ... } }免责声明:本站发布的内容(图片、视频和文字)以原创、来自互联网转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:ts@56dr.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
Copyright © 2009-2021 56dr.com. All Rights Reserved. 特网科技 版权所有 珠海市特网科技有限公司 粤ICP备16109289号
域名注册服务机构:阿里云计算有限公司(万网) 域名服务机构:烟台帝思普网络科技有限公司(DNSPod) CDN服务:阿里云计算有限公司 中国互联网举报中心 增值电信业务经营许可证B2