- 将抽象和实现解耦,让它们可以独立变化。中间红色监听代表桥梁
桥梁模式4个角色:
- 抽象化(Abstraction)角色:该角色抽象化的给出定义,并保存一个对实现化对象的引用;
- 实现化(Implementor)角色:该角色给出实现化角色的接口,但不给出具体的实现;
- 具体实现化(ConcreteImplementor)角色:该角色对实现化角色接口中的方法进行具体实现;
- 修正抽象化(RefinedAbstraction)角色:该角色扩展抽象化角色,它引用实现化角色并对抽象化角色进行修正;
//抽象化
/**
* 抽象化角色
*/
public abstract class Abstraction {
private Implementor imp;
public Abstraction(Implementor imp){
this.imp = imp;
}
public void operation(){
this.imp.operationImp();
}
}
/**
* 修正抽象化
*/
public class RefinedAbstraction extends Abstraction{
public RefinedAbstraction(Implementor imp){
super(imp);
}
// 修正父类的方法
@Override
public void operation(){
System.out.println("修正父类的方法-->业务代码");
}
}
实现化
/**
* 实现化角色
*/
public interface Implementor {
// 方法的实现化声明
void operationImp();
}
/**
* 具体实现化角色
*/
public class ConcreteImplementor implements Implementor{
// 方法的实现化实现
@Override
public void operationImp() {
// 业务处理代码
System.out.println("业务处理代码");
}
}
应用示例
/**
* 应用代码
*/
public class Client {
public static void main(String[] args){
// 定义一个实现化角色
Implementor imp = new ConcreteImplementor();
// 定义一个抽象化角色
Abstraction ab = new RefinedAbstraction(imp);
// 执行
ab.operation();
}
}
颜色和形状示例(中间箭头代表桥)
image.png实现
/**
* 颜色接口
*/
public interface Color {
String getColor();
}
/**
* 红色
*/
public class Red implements Color{
@Override
public String getColor() {
return "红色";
}
}
/**
* 绿色
*/
public class Green implements Color{
@Override
public String getColor() {
return "绿色";
}
}
抽象
/**
* 图形抽象类
*/
public abstract class AbstractShape {
Color color;
public AbstractShape(Color color){
this.color = color;
}
public abstract void draw();
}
/**
* 圆形
*/
public class Circle extends AbstractShape{
public Circle(Color color){
super(color);
}
@Override
public void draw() {
System.out.println("使用" + color.getColor() + "画圆形");
}
}
/**
* 正方形
*/
public class Square extends AbstractShape{
public Square(Color color){
super(color);
}
@Override
public void draw() {
System.out.println("使用" + color.getColor() + "画正方形");
}
}
应用示例
/**
* 应用代码
*/
public class ClientDemo {
public static void main(String[] args){
Color green = new Green();
AbstractShape circle = new Circle(green);
circle.draw();
Color red = new Red();
AbstractShape square = new Square(red);
square.draw();
}
}
参考:https://www.jianshu.com/p/70866d87f784
https://www.jianshu.com/p/94399f2a28f3
网友评论