目的:
业务委托模式在表示层和业务层之间添加了一个抽象层。 通过使用该模式,我们获得了各层之间的松散耦合,并封装了有关如何定位,连接到组成应用程序的业务对象以及与之交互的逻辑。
程序示例:
手机应用程序承诺将现有的任何电影流式传输到您的手机。它捕获用户的搜索字符串,并将其传递给业务委托层。业务委托层选择最合适的视频流服务,然后从那里播放视频。
1.视频类业务和接口
public interface VideoStreamingService{
void doProcessing();
}
@Slf4j
public class YouTubeService implements VideoStreamingService{
@Override
public void doProcessing() {
log.info("YouTubeService is now processing");
}
}
@Slf4j
public class NetflixService implements VideoStreamingService{
@Override
public void doProcessing() {
log.info("NetflixService is now processing");
}
}
2.有一个查找服务决定使用哪个服务
@Setter
public class BusinessLookup{
private NetflixService netflixService;
private YouTubeService youTubeService;
public VideoStreamingService getBusinessService(String move) {
if (move.toLowerCase(Locale.ROOT).contains("die hard")) {
return netflixService;
} else {
return youTubeService;
}
}
}
3.创建委托类
@Setter
public class BusinessDelegate{
private BusinessLookup businessLookup;
public void playbackMovie(String movie) {
VideoStreamingService service = businessLookup.getBusinessService(movie);
service.doProcessing();
}
}
4.业务调用
public class MobileClient{
private final BusinessDelegate businessDelegate;
public MobileClient(BusinessDelegate businessDelegate) {
this.businessDelegate = businessDelegate;
}
public void playbackMovie(String movie){
businessDelegate.playbackMovie(movie);
}
}
测试
BusinessDelegate delegate = new BusinessDelegate();
BusinessLookup lookup = new BusinessLookup();
lookup.setNetflixService(new NetflixService());
lookup.setYouTubeService(new YouTubeService());
delegate.setBusinessLookup(lookup);
MobileClient mobileClient = new MobileClient(delegate);
mobileClient.playbackMovie("Die Hard 2");
mobileClient.playbackMovie("Maradona: The Greatest Ever");
/*
NetflixService is now processing
YouTubeService is now processing
*/
类图: