命令模式(二)

一、Command模式的适用场合: 让方法运行最常见的方式是调用之,但是在很多情况下,我们不能控制和提供方法执行的上下文和时机。这种情况下,可以把方法封装在对象中。通过在对象中存储调用方法所需的信息,就可以让客户端或者服务决定何时调用这个方法。 Command模式的意图是把请求封装在对象中。 二、Command模式的经典应用: Command模式的经典应用就是菜单命令。如何安排才能让一个类在用户单击菜单的时候调用对应的方法呢?解决的方法就是应用多态性,具体做法如下:首先将操作的名称固定,然后针对不同的类给出不同的实现。 三、Command模式的简单例子具体的Command模式代码各式各样,因为如何封装命令,不同系统,有不同的做法.下面事例是将命令封装在一个Collection的List中,任何对象一旦加入List中,实际上装入了一个封闭的黑盒中,对象的特性消失了,只有取出时,才有可能模糊的分辨出: 典型的Command模式需要有一个接口.接口中有一个统一的方法,这就是"将命令/请求封装为对象": public interface Command {   public abstract void execute ( ); } 具体不同命令/请求代码是实现接口Command,下面有三个具体命令 public class Engineer implements Command {   public void execute( ) {     //do Engineer's command   } } public class Programmer implements Command {   public void execute( ) {     //do programmer's command   } } public class Politician implements Command {   public void execute( ) {     //do Politician's command   } } 按照通常做法,我们就可以直接调用这三个Command,但是使用Command模式,我们要将他们封装起来,扔到黑盒子List里去: public class producer{   public static List produceRequests() {     List queue = new ArrayList();     queue.add( new DomesticEngineer() );     queue.add( new Politician() );     queue.add( new Programmer() );     return queue;   } } 这三个命令进入List中后,已经失去了其外表特征,以后再取出,也可能无法分辨出谁是Engineer 谁是Programmer了,看下面客户端如何调用Command模式: public class TestCommand {   public static void main(String[] args) {         List queue = Producer.produceRequests();     for (Iterator it = queue.iterator(); it.hasNext(); )        //客户端直接调用execute方法,无需知道被调用者的其它更多类的方法名。        ((Command)it.next()).execute();      } } 由此可见,调用者基本只和接口打交道,不合具体实现交互,这也体现了一个原则,面向接口编程,这样,以后增加第四个具体命令时,就不必修改调用者TestCommand中的代码了.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值