1. 定义
将抽象部分与它的实现部分分离,使它们可以都可以独立的变化。
2. 类图
Abstraction:抽象部分接口,通常在这个对象中,要维护一个实现部分的对象引用,抽象方法里面的方法,需要调用实现部分的对象来完成。
RefinedAbstraction:扩展抽象部分的接口
Implementor:实现部分接口
ConcreteImplementor:具体实现Implementor的对象
3. 实例
package com.jerry.designpattern; /** * * @author Jerry * @date 2015年2月9日 下午10:46:29 */ public abstract class AbstractMessage { protected IMessage msg; public AbstractMessage(IMessage msg) { this.msg = msg; } public abstract void sendMessage(String message, String user); } package com.jerry.designpattern; /** * * @author Jerry * @date 2015年2月9日 下午10:50:56 */ public class CommonMessage extends AbstractMessage{ public CommonMessage(IMessage msg) { super(msg); // TODO Auto-generated constructor stub } @Override public void sendMessage(String message, String user) { // TODO Auto-generated method stub this.msg.send(message, user); } } package com.jerry.designpattern; /** * * @author Jerry * @date 2015年2月9日 下午10:44:43 */ public interface IMessage { void send(String message, String user); } package com.jerry.designpattern; /** * * @author Jerry * @date 2015年2月9日 下午10:50:07 */ public class MessageEmail implements IMessage{ @Override public void send(String message, String user) { // TODO Auto-generated method stub System.out.println("使用邮件方式发信息<" + message + ">给 " + user); } } package com.jerry.designpattern; /** * * @author Jerry * @date 2015年2月9日 下午10:59:10 */ public class MessagePhone implements IMessage{ @Override public void send(String message, String user) { // TODO Auto-generated method stub System.out.println("使用手机方式发信息<" + message + ">给 " + user); } } package com.jerry.designpattern; /** * * @author Jerry * @date 2015年2月9日 下午10:48:23 */ public class MessageSMS implements IMessage{ @Override public void send(String message, String user) { // TODO Auto-generated method stub System.out.println("使用站内短消息方式发信息<" + message + ">给 " + user); } } package com.jerry.designpattern; /** * * @author Jerry * @date 2015年2月9日 下午10:59:50 */ public class SpecialUrgencyMessage extends AbstractMessage{ public SpecialUrgencyMessage(IMessage msg) { super(msg); // TODO Auto-generated constructor stub } @Override public void sendMessage(String message, String user) { // TODO Auto-generated method stub System.out.println("十万火急!"); this.msg.send(message, user); } } package com.jerry.designpattern; /** * * @author Jerry * @date 2015年2月9日 下午10:52:14 */ public class UrgencyMessage extends AbstractMessage{ public UrgencyMessage(IMessage msg) { super(msg); // TODO Auto-generated constructor stub } @Override public void sendMessage(String message, String user) { // TODO Auto-generated method stub System.out.println("紧急信息"); this.msg.send(message, user); this.warning(); } private void warning() { // TODO Auto-generated method stub System.out.println("请尽快处理"); } } package com.jerry.designpattern; /** * * @author Jerry * @date 2015年2月9日 下午10:54:10 */ public class Client { public static void main(String[] args) { IMessage sms = new MessageSMS(); IMessage email = new MessageEmail(); IMessage phone = new MessagePhone(); AbstractMessage commonMessage = new CommonMessage(sms); commonMessage.sendMessage("请于明天上午9点在花果山集合", "猪八戒"); AbstractMessage urgencyMessage = new UrgencyMessage(email); urgencyMessage.sendMessage("附近有妖怪,悟空", "悟空"); AbstractMessage specialUrgencyMessage = new SpecialUrgencyMessage(phone); specialUrgencyMessage.sendMessage("师傅被妖怪抓走了!", "大师兄"); } }
4. 什么是桥接
所谓桥接,通俗的讲就是在不同的东西之间塔一座桥,让它们能够连接起来,可以相互通信和使用。
5. 桥接的优点
a. 分离抽象和实现部分
b. 更好的扩展性
c. 可动态的切换实现
d. 减少子类的数量