java设计模式之桥接模式

名称

桥接模式(Bridge)

意图

将抽象部分与它的实现相互分离,使他们都可以独立地变化。

动机

当一个抽象有多个实现地时候,通常由继承来协调他们。抽象类定义对该抽象的接口,而具体的子类则用不同的方式加以实现。但是此方法有时不够灵活,继承机制将抽象部分与它的实现部分固定在一起,使得难以对抽象部分和实现部分独立修改、扩充和重用。

适用性

  • 不希望在抽象和它的实现部分之间有一个固定的绑定关系。
  • 类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充。
  • 对一个抽象的实现部分的修改应对客户不产生影响,即客户的代码不必重新编译。
  • 想对用户完全隐藏抽象的实现部分。
  • 在多个对象间共享实现,但是同时不希望客户知道这一点。

结构

图片来自某百科

参与者

  • Abstraction
    • 定义抽象类的接口
    • 维护一个指向Implementor类型对象的指针(或者引用)
  • RefinedAbstraction
    • 扩充由Abstraction定义的接口
  • Implementor
    • 定义实现类的接口,该接口不一定要与Abstraction的接口完全一致,事实上这两个接口可以完全不同。一般来讲,Implementor接口仅提供基本操作,而Abstraction则定义了基于这些基本操作的较高层次的操作。
  • ConcreteImplementor
    • 实现Implementor接口并定义它的具体实现。

协作

Abstraction将client的请求转换为它的Implementor对象

优缺点

优点

  • 分离接口以及实现部分
  • 提高可扩充性
  • 实现细节对客户透明

示例代码

package abc;
//这里时抽象类或者时接口
abstract class Car{
    protected Color color;
    //这里保存了一个指向另一个接口类型对象的引用
    public void setColor(Color color){
        this.color=color;
    }
    public abstract void getInfor();
}
//下面时抽象类的具体实现BMW和QQ两种车
class BMW extends Car{

    @Override
    public void getInfor(){
        System.out.println("this is a "+this.color.getColor()+" BMW");
    }
}

class QQ extends Car{

    @Override
    public void getInfor(){
        System.out.println("this is a "+this.color.getColor()+" QQ");
    }
}

//这里时一个抽象接口,这个接口和刚刚的抽象类就是所谓的桥
interface Color {
    public String getColor();
}
class Black implements Color{
    @Override
    public String getColor(){
        return "black";
    }
}
class Red implements Color{
    @Override
    public String getColor(){
        return "red";
    }
}
class Yellow implements Color{
    @Override
    public String getColor(){
        return "yellow";
    }
}
public class Bridge{
    public static void main(String[]args){
        Car car1=new BMW();
        car1.setColor(new Yellow());
        car1.getInfor();
    }
}

输出结果

this is a yellow BMW
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值