`
丶西红柿丿炒蛋
  • 浏览: 5559 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

桥接模式

 
阅读更多

定义

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

   分析

        抽象化

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

        实现化

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

        脱藕

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

   举例


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

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与模式》

 

 

  • 大小: 13.9 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics