Thinking in Java 4th chap7笔记-复用类(六)
public String toString()
{
return "I'm a villain and my name is " + name;
}
}
package com.book.chap7.reuse;
/**
*
*构造太空船的一种方式是使用继承
*
然而SpaceShip并非真正的SpaceShipControl,即便你可以告诉SpaceShip向前运行(forward)
*
更准确的讲,SpaceShip包含SpaceShipControl,于此同时SpaceShipControl的所有方法在SpaceShip中都暴露了出来
*
*{@link SpaceShipDelegation}
*
*@author landon
*@since JDK1.6
*@version 1.0 2012-4-17
*
*/
public class SpaceShip extends SpaceShipControl
{
private String name;
public SpaceShip(String name)
{
this.name = name;
}
@Override
public String toString()
{
return name;
}
public static void main(Stringargs)
{
SpaceShip ship = new SpaceShip("tracy landon");
//调用了基类的forward方法
ship.forward(100);
}
}
package com.book.chap7.reuse;
/**
*
*太空船控制模块
*
*@author landon
*@since JDK1.6
*@version 1.0 2012-4-17
*
*/
public class SpaceShipControl
{
/**
*
* 以某速度上
*
* @param velocity
*/
void up(int velocity)
{
}
/**
*
* 以某速度下
*
* @param velocity
*/
void down(int velocity)
{
}
/**
*
* 以某速度左
*
* @param velocity
*/
void left(int velocity)
{
}
/**
*
* 以某速度右
*
* @param velocity
*/
void right(int velocity)
{
}
/**
*
* 以某速度前
*
* @param velocity
*/
void forward(int velocity)
{
}
/**
*
* 以某速度后
*
* @param velocity
*/
void back(int velocity)
{
}
/**
* 发动机加速
*/
void turboBoost()
{
}
}
package com.book.chap7.reuse;
/**
*
*飞船代理
*
代理方式,介于继承和组合的一个中庸之道
*
*@author landon
*@since JDK1.6
*@version 1.0 2012-4-17
*
*/
public class SpaceShipDelegation
{
private String name;
//SpaceShipControl作为该类的成员,飞船控制
private SpaceShipControl control = new SpaceShipControl();
public SpaceShipDelegation(String name)
{
this.name = name;
}
//Delegated method,所有的代理方法,该类中暴露了所有SpaceShipControl的方法
//右键Source->Generate Delegate Methods
public void up(int velocity)
{
control.up(velocity);
}
public void down(int velocity)
{
control.down(velocity);
}
public void left(int velocity)
{
control.left(velocity);
}
public void right(int velocity)
{
control.right(velocity);
}
public void forward(int velocity)
{
control.forward(velocity);
}
public void back(int velocity)
{
control.back(velocity);
}
public void turboBoost()
{
control.turboBoost();
}
public static void main(Stringargs)
{
SpaceShipDelegation ship = new SpaceShipDelegation("tracy mcgrady");
//通过调用代理的control的forward方法
ship.forward(100);
}
}