桥梁模式
又叫桥接模式,将抽象和实现解耦,使得两者可以独立的变化。
优点:
1、抽象和实现分离;2、优秀的扩充能力;3、实现细节对客户透明。
使用场景:
1、不希望或不适用使用继承的场景;
2、接口或者抽象类不稳定的场景;
3、重用性要求较高的场景。
//实现化角色:他是接口或者抽象类:定义角色必须的行为和属性。
public interface Implementor {
public void doSomething();
public void doAnything();
}
//抽象化角色:定义出该角色的行为,同时保存一个对实现化角色的引用,该角色一般是抽象类
public abstract class Abstraction {
//定义对实现化角色的引用
private Implementor imp;
//约束子类必须实现该构造函数
public Abstraction(Implementor imp) {
super();
this.imp = imp;
}
//自身的行为和属性
public void request(){
this.imp.doSomething();
}
public Implementor getImp() {
return imp;
}
}
//具体实现化角色:它实现接口或者抽象定义的方法和属性
public class ConcreteImplementor1 implements Implementor {
@Override
public void doSomething() {
}
@Override
public void doAnything() {
}
}
//具体实现化角色:它实现接口或者抽象定义的方法和属性
public class ConcreteImplementor2 implements Implementor {
@Override
public void doSomething() {
}
@Override
public void doAnything() {
}
}
//修正抽象化角色:它引用实现化角色对抽象化角色进行修正
public class RefinedAbstraction extends Abstraction {
@Override
public void request() {
//业务处理
super.request();
super.getImp().doAnything();
}
public RefinedAbstraction(Implementor imp) {
super(imp);
}
}
public class Client {
public static void main(String[] args) {
//定义一个实现化角色
Implementor implementor = new ConcreteImplementor1();
//定义一个抽象化角色
Abstraction abstraction = new RefinedAbstraction(implementor);
abstraction.request();
}
}