Java组合与代理如何选择的实例

public class SpaceShipDelegation {
  private String name;
  private SpaceShipControls controls =
    new SpaceShipControls();
  public SpaceShipDelegation(String name) {
    this.name = name;
  }
  // Delegated methods:
  public void back(int velocity) {
    controls.back(velocity);
  }
  public void down(int velocity) {
    controls.down(velocity);
  }
  public void forward(int velocity) {
    controls.forward(velocity);
  }
  public void left(int velocity) {
    controls.left(velocity);
  }
  public void right(int velocity) {
    controls.right(velocity);
  }
  public void turboBoost() {
    controls.turboBoost();
  }
  public void up(int velocity) {
    controls.up(velocity);
  }
  public static void main(String[] args) {
    SpaceShipDelegation protector =
      new SpaceShipDelegation("NSEA Protector");
    protector.forward(100);
  }
} ///:~

SpaceShip类要控制行动需要SpaceShipControls类,有三种选择:SpaceShip类继承SpaceShipControls类、SpaceShip类中创建SpaceShipControls类的对象(组合)、表面通过SpaceShip类控制,底层实际通过SpaceShipControls类控制(代理)

1.SpaceShip类继承SpaceShipControls类

优点:可以通过控制SpaceShip来直接控制行动

缺点:SpaceShipControls类中的所有方法全部暴露给SpaceShip类

2.SpaceShip类中创建SpaceShipControls类的对象(组合)

优点:SpaceShip类与SpaceShipControls类是has-a关系,符合实际飞船与飞船控制之间的关系

缺点:不能通过控制SpaceShip来直接控制飞船行动,比如向前命令,实际上应该是SpaceShip向前,而不应该是SpaceShipControls向前,但组合做不到这一点

3.表面通过SpaceShip类控制,底层实际通过SpaceShipControls类控制(代理)

优点:①表面通过SpaceShip类控制,底层实际通过SpaceShipControls类控制,符合实际逻辑,向前是Space Ship向前,不是SpaceShipControls向前

           ②控制力更强,可以选择只将SpaceShipControls类部分方法暴露给SpaceShip类

缺点:Java语言不直接支持代理,需要开发工具的支持,比如:JerBrains Idea IDE

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值