设计模式之桥梁模式

由来

传统地,当一个抽象可能有多个实现时,通常用继承来协调它们:抽象类定义该抽象的接口,具体的子类则用不同的方式加以实现。

但是此方法有时不够灵活:继承机制将抽象部分与它的实现部分绑定,难以对抽象部分和实现部分独立地进行修改、扩充和重用。

目的

桥接模式将抽象部分与实现部分分离,使它可以独立的变化。

适用场景

  • 不希望在抽象和它的实现部分之间有一个固定的绑定关系
  • 类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充
  • 实现部分的修改应对客户不产生影响
  • 想对客户完全隐藏抽象的实现部分

结构

在这里插入图片描述

角色

  • Abstraction
    定义抽象类的接口
    维护一个指向Implementor类型对象的指针

  • RefinedAbstraction
    扩充由Abstraction定义的接口

  • Implementor
    定义实现类的接口,不一定要与Abstraction的接口完全一致,甚至可以完全不同

  • ConcreteImplementor
    实现Implementor接口并定义它的具体实现

效果

  • 分离接口及其实现部分
    抽象类的实现可以在运行时刻进行配置
    一个对象甚至可以在运行时刻改变它的实现

  • 提高可扩充性
    抽象与实现两部分可以单独扩充

  • 实现细节对客户透明
    可以对客户隐藏实现细节

实例

在这里插入图片描述

// 图形
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 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 class Test {
public static void main(String[] args) {
Color color = new Green();
AbstractShape shape = new Square(color);
shape.draw();
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值