01定义桥接模式是对象的结构化模式。也称为HandleandBody模式或接口模式。桥接模式旨在“将抽象与实现解耦,使两者可以独立变化”。02案例需要通过企业微信和qq给员工发送消息。方案一定义发送消息的接口/***发送消息的接口*@author:liyajie*@createTime:2022/2/2110:33*@version:1.0*/publicinterfaceAbstractSendMsgService{//发送消息publicvoidsendMsg();}definecommonmessageinterface/***commonmessageinterface*@author:liyajie*@createTime:2022/2/2111:32*@version:1.0*/publicinterfaceCommonMsgextendsAbstractSendMsgService{}定义微信消息implementationclass/***发送消息的实现接口*@author:liyajie*@createTime:2022/2/2110:35*@version:1.0*/publicclassWxMsgServiceImplimplementsCommonMsg{@OverridepublicvoidsendMsg(){System.out.println("老板给你发了微信,你去领取");}}定义QQ消息实现类/***发送消息接口的实现*@author:liyajie*@createTime:2022/2/2110:35*@version:1.0*/publicclassQqMsgServiceImplimplementsCommonMsg{@OverridepublicvoidsendMsg(){System.out.println("老板用QQ给你发了消息,去接收吧");}}定义测试类/***测试类*@author:liyajie*@createTime:2022/2/2110:37*@version:1.0*/publicclassTest{publicstaticvoidmain(String[]args){newWxMsgServiceImpl().sendMsg();newQqMsgServiceImpl().sendMsg();}}测试结果方案二定义发送消息的抽象接口/***发送消息的抽象接口*@author:liyajie*@createTime:2022/2/2110:33*@version:1.0*/publicabstractclassNewAbstractSendMsgService{protectedSendMsgImplementorsendMsgImplementor;publicNewAbstractSendMsgService(SendMsgImplementorsendMsgImplementor){this.sendMsgImplementor=sendMsgImplementor;}//微信publicvoidsendMsg(){this.sendMsgImplementor.sendMsg();}}定义发送消息的实现类/***发送消息的实现接口*@author:liyajie*@createTime:2022/2/2110:35*@version:1.0*/publicclassNewSendMsgServiceImplextendsNewAbstractSendMsgService{publicNewSendMsgServiceImpl(SendMsgImplementorsendMsgImplementor){超级(sendMsgImplementor);}@OverridepublicvoidsendMsg(){super.sendMsg();}}定义发送消息的统一接口/***发送消息的统一接口*@author:liyajie*@createTime:2022/2/2110:41*@version:1.0*/publicinterfaceSendMsgImplementor{voidsendMsg();}定义了微信发送消息的实现类/***微信发送消息*@author:liyajie*@createTime:2022/2/2110:45*@version:1.0*/publicclassWxImplementorimplementsSendMsgImplementor{@OverridepublicvoidsendMsg(){System.out.println("老板给你发微信消息,你去接收");}}定义QQ发送消息实现类/***QQ发送消息*@author:liyajie*@createTime:2022/2/2110:45*@version:1.0*/publicclassQqImplementorimplementsSendMsgImplementor{@OverridepublicvoidsendMsg(){System.out.println("老板给你QQ发消息,去接收");}}定义测试类/***测试类*@author:liyajie*@createTime:2022/2/2110:37*@version:1.0*/publicclassTestNew{publicstaticvoidmain(String[]args){NewSendMsgServiceImplnewSendMsgService=newNewSendMsgServiceImpl(newQqImplementor());newSendMsgService.sendMsg();NewSendMsgServiceImplnewSendMsgService2=newNewSendMsgServiceImpl(newWxImplementor());newSendMsgService2.sendMsg();}}测试结果03对比分析方案1,即大致实现方法,微信和QQ这种发送消息的方法需要同时实现CommonMsg和AbstractSendMsgService接口中的方法,耦合度高;此外,例如需要发送新的紧急消息或通过添加新的短信发送消息,需要进行很多更改,并且可扩展性相对较低。第二种解决方案是实现桥接模式。在消息类的构造方法中,传入接口SendMsgImplementor,使发送消息的抽象和具体实现分离,实现解耦;紧急消息的发送后面或者新增短信发送消息的需求,只需要增加紧急消息类和短信发送类即可,与QQ、微信等互不影响。发送消息为易于扩展,符合开闭原则,复用原则。04总结桥接模式将抽象部分和实现部分分开,极大地提供了系统的灵活性。保持抽象和实现分离并分别定义接口有助于对系统进行分层,从而产生更好的结构化系统。桥接模式使得抽象部分和实现部分可以独立扩展,互不影响,大大提高了系统的可扩展性。本文转载自微信公众号《温故知新java》,可通过以下二维码关注。转载本文请联系java公众号。
