桥接模式

定义

        将抽象化和实现化脱耦,使二者可以独立的变化。

   分析

        抽象化

        多个实体中的共同概念特性。一组对象如果有相同的概念联系,那便可以通过一个共同的类来描述。如果一写类具有共同的概念性联系,往往可以用一个抽象类来描述。

        实现化

        抽象化给出的具体实现就是实现化。一个类的实力就是这个累的实现化。具体子类是抽象超类的实现化。

        脱藕

        将两个类之间的强关联转为弱关联。强关联:编译期已经确定的,无法在运行时动态改变的关联。弱关联:动态确定切可在运行时动态改变的关联。继承便是强关联,组合(聚合)是弱关联。

   举例


        使用桥接模式的关键在于找出抽象化角色和实现化角色。这里的空中巴士、波音、麦道都是飞机制造商,而载客飞机和载货飞机是飞机种类。很明显,不管是飞机制造商还是飞机种类都是还会增加的。制造商制造飞机,所以制造商是飞机的一个属性。即飞机含有一个制造商对象。所以,制造商是抽象化,飞机是实现化。

abstract class  AirPlaneMaker{
    abstract  public void produce();
}
abstract  class  AirPlane{
    abstract  public void fly();
    protected AirPlaneMaker airPlaneMaker;
}

        AirPlane扮演抽象化角色,因必须持有AirPlaneMaker的引用,所以不可能为接口。

 

class PassengerPlane extends AirPlane{
    public void fly() {
    }
}
class CargoPlane extends AirPlane{
    public void fly() {
    }
}

        抽象化角色的实现类。

 

class Airbus extends  AirPlaneMaker{
    public void produce() {
    }
}
class Boeing extends  AirPlaneMaker{
    public void produce() {
    }
}
class MD extends  AirPlaneMaker{
    public void produce() {
    }
}

        实现化角色的实现类。

 

        两个结构通过组合(聚合)联系到一起,当任意一方需要拓展添加子类时,通过多态衔接。无需修改原有代码即可完成拓展。设计贴合“开闭”原则。

 

 

 

 

参考:

《Java与模式》

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值