一、桥接模式概述
桥接模式定义:通过将实现和抽象放在两个不同的类层次中而使它们可以独立改变。不只改变你的实现,也改变你的抽象。(对象结构型)
- 桥接模式的优缺点:
- 优点:
- 1.将实现予以解耦,让它和界面之间不再永久绑定;
- 2.抽象和实现可以独立扩展,不会影响到对方;
- 3.对于“具体的抽象类”所做的改变,不会影响到客户。
- 缺点:
- 增加了复杂度。
- 优点:
- 适用场景:
- 适合使用在需要跨越多个平台的图形和窗口系统上;
- 当需要用不同的方式改变接口和实现时,桥接模式很好用。
二、代码实现
- 抽象化(Abstraction)角色:定义抽象类,并包含一个对实现化对象的引用;
- 扩展抽象化(Refined Abstraction)角色:是抽象化角色的子类,实现父类中的业务方法,并通过组合关系调用实现化角色中的业务方法;
- 实现化(Implementor)角色:定义实现化角色的接口,供扩展抽象化角色调用;
- 具体实现化(Concrete Implementor)角色:给出实现化角色接口的具体实现。
2.1 实现化角色(Implementor)
package bridge.eg;
//实现化角色
public interface Implementor{
public void OperationImpl();
}
2.2 具体实现化角色(ConcreteImplementorA)
package bridge.eg;
//具体实现化角色
public class ConcreteImplementorA implements Implementor {
@Override
public void OperationImpl() {
// TODO Auto-generated method stub
System.out.println("具体实现化(Concrete Implementor)角色被访问" );
}
}
2.3 抽象化角色(Abstraction)
package bridge.eg;
//抽象化角色
public abstract class Abstraction {
protected Implementor imple;
protected Abstraction(Implementor imple) {
this.imple=imple;
}
public abstract void Operation();
}
2.4 扩展抽象化角色(RefinedAbstraction)
package bridge.eg;
//扩展抽象化角色
public class RefinedAbstraction extends Abstraction {
protected RefinedAbstraction(Implementor imple){
super(imple);
}
@Override
public void Operation() {
// TODO Auto-generated method stub
System.out.println("扩展抽象化(Refined Abstraction)角色被访问" );
imple.OperationImpl();
}
}
2.5 main方法实现桥接模式(Test)
package bridge.eg;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Implementor imple=new ConcreteImplementorA();
Abstraction abs=new RefinedAbstraction(imple);
abs.Operation();
}
}