命令(Command)模式例子2 -------- AudioPlayer系统
系统描述: 小女孩julia有一个盒式录音机,有播音play,倒带rewind,停止stop功能。julia不需要知道命令的执行细节,只需要知道在键盘上按下什么键就可以了。 用命令模式来模拟。
代码:
/**
* This class plays the role of Abstract Command
*/
public interface Command
{
public abstract void execute ( );
}
/**
* This class plays the role of Concrete Command
*/
public class PlayCommand implements Command
{
private AudioPlayer myAudio;
public PlayCommand ( AudioPlayer a)
{
myAudio = a;
}
public void execute( )
{
myAudio.play();
}
}
/**
* This class plays the role of Concrete Command
*/
public class RewindCommand implements Command
{
private AudioPlayer myAudio;
public RewindCommand ( AudioPlayer a)
{
myAudio = a;
}
public void execute()
{
myAudio.rewind();
}
}
/**
* This class plays the role of Concrete Command
*/
public class StopCommand implements Command
{
/**
* @directed
*/
private AudioPlayer myAudio;
public StopCommand ( AudioPlayer a)
{
myAudio = a;
}
public void execute( )
{
myAudio.stop();
}
}
/**
* This is the Invoker role
*/
public class Keypad
{
/**
* @link aggregation
*/
private Command playCmd;
/**
* @link aggregation
*/
private Command rewindCmd;
/**
* @link aggregation
*/
private Command stopCmd;
public Keypad(Command play, Command stop, Command rewind)
{
// concrete Command registers itself with the invoker
playCmd = play;
stopCmd = stop;
rewindCmd = rewind;
}
public void play()
{
playCmd.execute();
}
public void stop()
{
stopCmd.execute();
}
public void rewind()
{
rewindCmd.execute();
}
}
/**
* This class plays the role of Receiver
*/
public class AudioPlayer
{
public void play( )
{
System.out.println("Playing...");
}
public void rewind( )
{
System.out.println("Rewinding...");
}
public void stop()
{
System.out.println("Stopped.");
}
}
/**
* This is the Client role
*/
public class Julia
{
/**
* @link aggregation
*/
private static Keypad keypad ;
/**
* @link aggregation
*/
private static AudioPlayer myAudio = new AudioPlayer();
public static void main(String[] args)
{
test1();
}
private static void test1()
{
Command play = new PlayCommand(myAudio);
Command stop = new StopCommand(myAudio);
Command rewind = new RewindCommand(myAudio);
keypad = new Keypad(play, stop, rewind);
keypad.play();
keypad.stop();
keypad.rewind();
keypad.stop();
keypad.play();
keypad.stop();
}
}