桥梁模式定义
将抽象和实现解耦,使得二者可以独立变化
所谓耦合,就是两个实体的行为的某种强关联。而将它们的强关联去掉,就是耦合的解脱,或称脱耦。在这里,脱耦是指将抽象化和实现化之间的耦合解脱开,或者说是将它们之间的强关联改换成弱关联。
将两个角色之间的继承关系改为聚合关系,就是将它们之间的强关联改换成为弱关联。因此,桥梁模式中的所谓脱耦,就是指在一个软件系统的抽象化和实现化之间使用组合/聚合关系而不是继承关系,从而使两者可以相对独立地变化。这就是桥梁模式的用意。
桥接模式角色
1.Abstraction 抽象化角色
主要职责是定义出该角色的行为,同事保存一个队实现话角色的引用,一般为抽象类
2.Implementor实现化角色
接口或者抽象类,定义必须的行为和属性
3.RefinedAbstracction修正抽象画角色
它引用是实现化角色对抽象化角色进行修正。
4.ConcreteImplementor具体实现化角色
他的实现接口或者抽象类定义的方法和属性代码实例
public abstract class Abstraction {
protected Implementor impl;
public Abstraction(Implementor impl){
this.impl = impl;
}
//示例方法
public void operation(){
impl.operationImpl();
}
}
public class RefinedAbstraction extends Abstraction {
public RefinedAbstraction(Implementor impl) {
super(impl);
}
//其他的操作方法
public void otherOperation(){
}
}
public abstract class Implementor {
/**
* 示例方法,实现抽象部分需要的某些具体功能
*/
public abstract void operationImpl();
}
public class ConcreteImplementorA extends Implementor {
@Override
public void operationImpl() {
//具体操作
}
}
public class ConcreteImplementorB extends Implementor {
@Override
public void operationImpl() {
//具体操作
}
}
- 使用场景
考虑这样一个实际的业务功能:发送提示消息。基本上所有带业务流程处理的系统都会有这样的功能,比如OA上有尚未处理完毕的文件,需要发送一条消息提示他。
从业务上看,消息又分成普通消息、加急消息和特急消息多种,不同的消息类型,业务功能处理是不一样的,比如加急消息是在消息上添加加急,而特急消息除了添加特急外,还会做一条催促的记录,多久不完成会继续催促;从发送消息的手段上看,又有系统内短消息、手机短信息、邮件等。