设计模式之--Bridge

在什么情况下使用桥梁模式:
1如果一个系统需要在构件的抽象化角色和具体角色之间增加更多的灵活性,避免在两个层次之间建立静态的联系。
2设计要求实现化角色的任何改变不应当影响客户端,或者说实现化角色的改变对客户端是完全透明的。
3一个构件有多于一个的抽象化角色和实现化角色,系统需要他们之间进行动态耦合。
4虽然在系统中使用继承是没有问题的,但是由于抽象化角色和具体化角色需要独立变化,设计要求需要独立管理这两者。

/**
 *      +飞机(abstract)<---------------->+飞机制造商(abstract)
 *       |_载客的飞机(extends)             |_空中巴士公司(extends)
 *       |_运货的飞机(extends)             |_波音公司(extends)
 *       |_麦道公司(extends)
 *
 *将抽象化与实现化脱耦,使得二者可以独立的变化,也就是说将他们之间的
 *强关联变成弱关联,也就是指在一个软件系统的抽象化和实现化之间使用
 *组合/聚合关系而不是继承关系,从而使两者可以独立的变化。
 *
 *如果有一种新的飞机类型,直接继承于Airplane就可;
 *如果有一个新的飞机生产商,直接继承于AirplaneMaker就可;
 *这样就使得系统的扩展性大大的得到提升。
 */

//飞机的的抽象类
abstract public class Airplane {
 abstract public void fly();
 protected AirplaneMaker airplaneMaker;
 public void setAirplaneMaker(AirplaneMaker airplaneMaker){
  this.airplaneMaker = airplaneMaker;
 }
}

//载客飞机
public class PassengerPlane extends Airplane {
 public void fly() {
  //write your code here
  airplaneMaker.produce();
 }
}

//运货的飞机
public class CargoPlane extends Airplane {
 public void fly() {
  //write your code here
  airplaneMaker.produce()
 }
}

//******************************************************************************

//飞机制造商的抽象类
abstract public class AirplaneMaker {
 abstract public void produce();
}

//空中巴士公司
public class Airbus extends AirplaneMaker {
 public void produce() {
  //write your code here
 }
}

//波音公司
public class Boeing extends AirplaneMaker {
 public void produce() {
  //write your code here
 }
}

//麦道公司
public class MD extends AirplaneMaker {
 public void produce() {
  //write your code here
 }
}

//main
public static void main(String[] args){
 //需要得到波音公司生产的运货飞机
 AirplaneMaker boeing = new Boeing();
 Airplane plane = new CargoPlane();
 plane.setAirplaneMaker(boeing);
 plane.fly();
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值