java 设计模式之装饰者模式 和命令模式

来源:互联网 发布:咨询警察网络平台 编辑:程序博客网 时间:2024/06/07 14:01

装饰设计模式引用网站 http://www.cnblogs.com/java-my-life/archive/2012/04/20/2455726.html


命令模式:,命令模式的核心就是把命令封装成类,对于命令执行者不需要知道现在执行的具体是什么命令。

 命令模式涉及到五个角色,它们分别是:

  ●  客户端(Client)角色:创建一个具体命令(ConcreteCommand)对象并确定其接收者。

  ●  命令(Command)角色:声明了一个给所有具体命令类的抽象接口。

  ●  具体命令(ConcreteCommand)角色:定义一个接收者和行为之间的弱耦合;实现execute()方法,负责调用接收者的相应操作。execute()方法通常叫做执行方法。

  ●  请求者(Invoker)角色:负责调用命令对象执行请求,相关的方法叫做行动方法。

  ●  接收者(Receiver)角色:负责具体实施和执行一个请求。任何一个类都可以成为接收者,实施和执行请求的方法叫做行动方法。

现在需求:小女孩茱丽(Julia)有一个盒式录音机,此录音机有播音(Play)、倒带(Rewind)和停止(Stop)功能,录音机的键盘便是请求者(Invoker)角色;茱丽(Julia)是客户端角色,而录音机便是接收者角色。Command类扮演抽象命令角色,而PlayCommand、StopCommand和RewindCommand便是具体命令类。茱丽(Julia)不需要知道播音(play)、倒带(rewind)和停止(stop)功能是怎么具体执行的,这些命令执行的细节全都由键盘(Keypad)具体实施。茱丽(Julia)只需要在键盘上按下相应的键便可以了。

 接收者角色,由录音机类扮演

public class AudioPlayer {        public void play(){        System.out.println("播放...");    }        public void rewind(){        System.out.println("倒带...");    }        public void stop(){        System.out.println("停止...");    }}

抽象命令角色类

public interface Command {    /**     * 执行方法     */    public void execute();}

具体命令类

public class PlayCommand implements Command {    private AudioPlayer myAudio;        public PlayCommand(AudioPlayer audioPlayer){        myAudio = audioPlayer;    }    /**     * 执行方法     */    @Override    public void execute() {        myAudio.play();    }}public class RewindCommand implements Command {    private AudioPlayer myAudio;        public RewindCommand(AudioPlayer audioPlayer){        myAudio = audioPlayer;    }    @Override    public void execute() {        myAudio.rewind();    }}public class StopCommand implements Command {    private AudioPlayer myAudio;        public StopCommand(AudioPlayer audioPlayer){        myAudio = audioPlayer;    }    @Override    public void execute() {        myAudio.stop();    }}
 请求者角色,由键盘类扮演

public class Keypad {    private Command playCommand;    private Command rewindCommand;    private Command stopCommand;        public void setPlayCommand(Command playCommand) {        this.playCommand = playCommand;    }    public void setRewindCommand(Command rewindCommand) {        this.rewindCommand = rewindCommand;    }    public void setStopCommand(Command stopCommand) {        this.stopCommand = stopCommand;    }    /**     * 执行播放方法     */    public void play(){        playCommand.execute();    }    /**     * 执行倒带方法     */    public void rewind(){        rewindCommand.execute();    }    /**     * 执行播放方法     */    public void stop(){        stopCommand.execute();    }}

 客户端角色,由茱丽小女孩扮演复制代码public class Julia {    public static void main(String[]args){        //创建接收者对象        AudioPlayer audioPlayer = new AudioPlayer();        //创建命令对象        Command playCommand = new PlayCommand(audioPlayer);        Command rewindCommand = new RewindCommand(audioPlayer);        Command stopCommand = new StopCommand(audioPlayer);        //创建请求者对象        Keypad keypad = new Keypad();        keypad.setPlayCommand(playCommand);        keypad.setRewindCommand(rewindCommand);        keypad.setStopCommand(stopCommand);        //测试        keypad.play();        keypad.rewind();        keypad.stop();        keypad.play();        keypad.stop();    }}



0 0
原创粉丝点击