桥接模式
类图
定义
- 将抽象和实现解耦,使得两者可以独立地变化
优点
- 抽象和实现分离
- 优秀的扩充能力 不管是增加抽象还是实现,都很容易
- 实现细节对客户透明
使用场景
- 不希望或不适合使用集成的场景
- 接口或抽象类不稳定的场景
- 重用性要求较高的场景 设计的颗粒度越细,则被重用的可能性就越大
实现化角色,定义角色的2个方法
public interface Implementor {
void doThingA();
void doThingB();
}
具体实现化角色 ,实现角色的方法
public class ConcreteImplementor implements Implementor {
@Override
public void doThingA() {
System.out.println("ConcreteImplementor->做A事情");
}
@Override
public void doThingB() {
System.out.println("ConcreteImplementor->做B事情");
}
}
抽象化角色,定义桥接操作
public abstract class Abstraction {
private Implementor imp;
/**
* 桥接现实化角色
*
* @param imp 现实化角色
*/
Abstraction(Implementor imp) {
this.imp = imp;
}
/**
* 自身的行为和属性
*/
public abstract void request();
/**
* 实现化角色的桥梁
*
* @return 实现化角色
*/
public Implementor getImp() {
return imp;
}
}
具体抽象化角色
public class RedifneAbstraction extends Abstraction {
/**
* 桥接现实化角色
*
* @param imp 现实化角色
*/
public RedifneAbstraction(Implementor imp) {
super(imp);
}
@Override
public void request() {
System.out.println("Abstraction->执行我自己的方法");
}
}
场景类
public class Client {
public static void main(String[] args) {
//创建实现化角色
Implementor imp = new ConcreteImplementor();
//创建抽象化角色
Abstraction abs = new RedifneAbstraction(imp);
//抽象化角色执行方法
abs.request();
//抽象化角色通过桥梁执行实现化角色的方法
abs.getImp().doThingA();
abs.getImp().doThingB();
}
}
运行结果
Abstraction->执行我自己的方法
ConcreteImplementor->做A事情
ConcreteImplementor->做B事情