Java桥接模式
温故知新之java 人气:0定义
桥梁模式是对象的结构模式。又称为柄体(Handle and Body)模式或接口(Interface)模式。桥梁模式的用意是“将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化”。
案例
需求
通过企业微信和qq的方式给员工发送消息
方案一
定义发送消息的接口
/** * 发送消息的接口 * @author:liyajie * @createTime:2022/2/21 10:33 * @version:1.0 */ public interface AbstractSendMsgService { // 发送消息 public void sendMsg(); }
定义普通消息接口
/** * 普通消息接口 * @author:liyajie * @createTime:2022/2/21 11:32 * @version:1.0 */ public interface CommonMsg extends AbstractSendMsgService{ }
定义微信消息实现类
/** * 发送消息的实现接口 * @author:liyajie * @createTime:2022/2/21 10:35 * @version:1.0 */ public class WxMsgServiceImpl implements CommonMsg{ @Override public void sendMsg() { System.out.println("老板使用微信给你发了消息,快去接收吧"); } }
定义QQ消息实现类
/** * 发送消息的实现接口 * @author:liyajie * @createTime:2022/2/21 10:35 * @version:1.0 */ public class QqMsgServiceImpl implements CommonMsg{ @Override public void sendMsg() { System.out.println("老板使用QQ给你发了消息,快去接收吧"); } }
定义测试类
/** * 测试类 * @author:liyajie * @createTime:2022/2/21 10:37 * @version:1.0 */ public class Test { public static void main(String[] args) { new WxMsgServiceImpl().sendMsg(); new QqMsgServiceImpl().sendMsg(); } }
测试结果
方案二
定义发送消息抽象接口
/** * 发送消息的抽象接口 * @author:liyajie * @createTime:2022/2/21 10:33 * @version:1.0 */ public abstract class NewAbstractSendMsgService { protected SendMsgImplementor sendMsgImplementor; public NewAbstractSendMsgService(SendMsgImplementor sendMsgImplementor){ this.sendMsgImplementor = sendMsgImplementor; } // 微信 public void sendMsg(){ this.sendMsgImplementor.sendMsg(); } }
定义发送消息实现类
/** * 发送消息的实现接口 * @author:liyajie * @createTime:2022/2/21 10:35 * @version:1.0 */ public class NewSendMsgServiceImpl extends NewAbstractSendMsgService{ public NewSendMsgServiceImpl(SendMsgImplementor sendMsgImplementor) { super(sendMsgImplementor); } @Override public void sendMsg() { super.sendMsg(); } }
定义发送消息统一接口
/** * 发送消息统一接口 * @author:liyajie * @createTime:2022/2/21 10:41 * @version:1.0 */ public interface SendMsgImplementor { void sendMsg(); }
定义微信发送消息实现类
/** * 微信发送消息 * @author:liyajie * @createTime:2022/2/21 10:45 * @version:1.0 */ public class WxImplementor implements SendMsgImplementor{ @Override public void sendMsg() { System.out.println("老板使用微信给你发了消息,快去接收吧"); } }
定义QQ发送消息实现类
/** * QQ发送消息 * @author:liyajie * @createTime:2022/2/21 10:45 * @version:1.0 */ public class QqImplementor implements SendMsgImplementor{ @Override public void sendMsg() { System.out.println("老板使用QQ给你发了消息,快去接收吧"); } }
定义测试类
/** * 测试类 * @author:liyajie * @createTime:2022/2/21 10:37 * @version:1.0 */ public class TestNew { public static void main(String[] args) { NewSendMsgServiceImpl newSendMsgService = new NewSendMsgServiceImpl(new QqImplementor()); newSendMsgService.sendMsg(); NewSendMsgServiceImpl newSendMsgService2 = new NewSendMsgServiceImpl(new WxImplementor()); newSendMsgService2.sendMsg(); } }
测试结果
对比分析
方案一,即一般实现方式,微信和QQ两种发送消息的方式需要同时去实现CommonMsg和AbstractSendMsgService两个接口中的方法,耦合性较高;另外比如新增紧急消息的发送或者新增短信的方式发送消息的需求,改动较多,扩展性较差。
方案二,为桥接模式实现方式,在消息类的构造方法中传入接口SendMsgImplementor,从而使发送消息的抽象和具体实现进行了分离,实现了解耦;后期新增紧急消息的发送或者新增短信的方式发送消息的需求,也只需要新增紧急消息类和短信发送类即可,和QQ,微信等发送消息互不影响,扩展方便,符合开闭原则,复用原则。
总结
桥梁模式分离了抽象部分和实现部分,从而极大地提供了系统的灵活性。让抽象部分和实现部分独立出来,分别定义接口,这有助于对系统进行分层,从而产生更好的结构化的系统。
桥梁模式使得抽象部分和实现部分可以分别独立地扩展,而不会相互影响,从而大大提高了系统的可扩展性。
加载全部内容