4、新建一个紧急程度为普通的消息类:
package com.zwx.design.pattern.bridge; public class CommonMsg extends AbstractMessage { public CommonMsg(IMessage iMessage) { super(iMessage); } @Override public void sendMessage(String content, String toUser) { this.doSomething(); super.sendMessage(content, toUser); } private void doSomething() { System.out.println("这只是一个普通消息"); } }
5、新建一个紧急程度为紧急的消息类:
package com.zwx.design.pattern.bridge; public class UrgentMessage extends AbstractMessage{ public UrgentMessage(IMessage iMessage) { super(iMessage); } @Override public void sendMessage(String content, String toUser) { doSomething(); super.sendMessage(content, toUser); } private void doSomething() { System.out.println("这是紧急消息,请优先发送"); } }
这时候假如要新增其他紧急程度那直接再建一个类就好了,非常方便。
6、最后新建一个测试类来测试一下:
package com.zwx.design.pattern.bridge; import java.io.IOException; public class TestBridge { public static void main(String[] args) throws IOException { IMessage iMessage = new EmailMessage(); AbstractMessage abstractMessage = new UrgentMessage(iMessage);//紧急邮件消息 abstractMessage.sendMessage("您好","张三丰"); //再来一个普通邮件消息 System.out.println("------------分割线---------------"); abstractMessage = new CommonMsg(iMessage); abstractMessage.sendMessage("您好","郭靖"); } }
输出结果如下:
这是紧急消息,请优先发送 邮件消息->张三丰:您好 ------------分割线--------------- 这只是一个普通消息 邮件消息->郭靖:您好
桥接模式优缺点
优点:
1、分离了抽象部分及其实现部分两个维度,实现了代码的解耦,提高了系统的扩展性。
3、扩展功能时只需要新增类,无需修改源代码,符合开闭原则。
4、通过组合而不是继承来实现耦合,符合合成复用原则。
缺点:
1、增加了系统的理解难度和设计难度(这也算是大部分设计模式的共性)
2、需要正确识别系统中各个独立变化的维度
总结
本文主要介绍桥接模式的原理,并结合了示例对其进行了分析。桥接模式也是通过组合来实现的。我们在开发中大家都知道要解耦,解耦的实质就是减少对象之间的关联,而继承是一种强关联,因为一旦通过继承,那么子类就会拥有父类所有公开的方法和属性,有些可能并不是子类需要的,而组合就不一样,组合是一种弱关联,我只是持有一个对象,但是我持有对象所拥有的功能并不是我的,和我并没有很强烈的关系。所以实质上在很多场景我们都可以通过组合来解耦继承对象之间的强关联关系。
最后还是希望大家记住编程中的一条原则,那就是:多用组合,少用继承。