设计模式-问个设计模式的问题:有一些不同的业务,不同的业务要用到一些不同的模块。现在想在不了解是什么业务之前就产生一个业务对象,在之后了解了业务类型后,更改业务对象的类型。有没有好的设计模式可以解决?

设计模式-问个设计模式的问题:有一些不同的业务,不同的业务要用到一些不同的模块。现在想在不了解是什么业务之前就产生一个业务对象,在之后了解了业务类型后,更改业务对象的类型。有没有好的设计模式可以解决?

偏爱自由 发布于 2017-07-09 字数 656 浏览 1046 回复 3

各业务类型的处理不一样,接口可以统一

是这样的,我弄流服务器,流服务器可以提供点播,直播,时移,回看等业务,不同的业务有不同的模块进行处理。现在想把流服务器支持的协议和具体的业务分离开来,想着在中间加个适配层,不同的业务模块有对应的适配模块进行处理,而协议层只处理协议相关的事情。流服务器在收到请求后就启动对应的适配层调用对应的模块进行处理,从而把协议层独立开来。但是协议层收到的有些请求,不能确定业务类型,必须从一个业务模块才能获得精确的业务类型,从而决定适配类型可这样协议层又得和业务模块进行交互,不是我的初衷。我想是协议层收到请求后直接调用相应适配层进行处理,让适配层与业务模块交互,获得业务类型,再改变适配类型,从而把协议层彻底独立出

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

偏爱自由 2017-10-21 3 楼

假定业务模块A是用于获得精确的业务类型的,有两个解决的思路:
(1)增加一个分发器:协议层收到请求后立即交给分发器来分发请求,分发器根据请求参数与业务类型的映射来确定业务类型,进而确定将请求交给哪个适配器来处理。这里关键是如何构建请求参数与业务类型的映射,这个构建工作可以有多种实现(管他是不是调用业务模块A,到这里已经与协议层解耦了)
(2)采用责任链模式,将多个适配器组成一个适配器链,协议层收到请求后交给这个适配器链来处理,然后适配器链逐个调用适配器来处理请求,如果请求参数符合该适配器的业务类型,则调用该适配器来处理请求,否则跳过该适配器。增加一个适配器A来封装业务模块A,该适配器可以处理任何请求,并放在适配器链的首部(第一个执行用于根据请求参数确定业务类型)

浮生未歇 2017-10-02 2 楼

使用设计模式最好不要预先假定自己要用什么模式去套现有的问题,从实际问题出发借用模式来解决问题会让事情更顺利。从你的描述来讲,协议层,适配层,业务层的互相交互是不可避免了,你能做的只是改变交互的方式,为了将协议层和业务层分离,你想要将协议层和业务层的一部分功能和交互抽象出来放到适配层。我想应该能达到你的目的。

夜无邪 2017-08-11 1 楼

设计模式,只是解决问题的一种通用的思维方法,根据你的描述,我觉得用桥接模式,貌似合适,根据您的这句话:现在想在不了解是什么业务之前就产生一个业务对象,在之后了解了业务类型后,更改业务对象的类型。
很明显这个是实例化根据业务不同来创建,根据里氏替换原则,很好解决的!