当前位置: 移动技术网 > IT编程>软件设计>设计模式 > 设计模式之 Command通俗理解

设计模式之 Command通俗理解

2020年08月10日  | 移动技术网IT编程  | 我要评论
1 command模式定义Commad模式是一种对象行为模式, 它可以对发送者(sender)和接收者(receiver)完全解耦(decoupling)。("发送者" 是请求操作的对象,"接收者" 是接收请求并执行某操作的对象。有了 "解耦",发送者对接收者的接口一无所知。)2 通俗理解简单来看,在对象A调用了对象B的一个方法,这样对象A就可以看做一个发送者,对象B就是一个接收者,在这种情况下,对象A必须知道对象B相应的方法名。如果在这里使用Command模式的话,就相当于在对象A和对象.

1 command模式定义

Commad模式是一种对象行为模式, 它可以对发送者(sender)和接收者(receiver)完全解耦(decoupling)。("发送者" 是请求操作的对象,"接收者" 是接收请求并执行某操作的对象。有了 "解耦",发送者对接收者的接口一无所知。)

 

2 通俗理解

简单来看,在对象A调用了对象B的一个方法,这样对象A就可以看做一个发送者,对象B就是一个接收者,在这种情况下,对象A必须知道对象B相应的方法名。如果在这里使用Command模式的话,就相当于在对象A和对象B之间加了一个中间层,由中间层来完成这一次的调用,在这种情况下,对象A并不需要知道对象B的方法。

3 如何使用?

举例:将命令封装在一个 Collection 的 List 中,任何对象一旦加入 List 中,实际上装入了一个封闭的黑盒中,对象的特性消失了,只有取出时,才有可能模糊的分辨出。

package xx.study.design.commad;

/**
 * 典型的 Command 模式需要有一个接口.
 * 接口中有一个统一的方法,这就是"将命令/请求封装为对象
 */
public interface Command {
    public void execute ( );
}
package xx.study.design.commad;

public class Engineer implements Command {
    public void execute( ) {
        //do Engineer's command
        System.out.println("开始铺路");
    }
}
package xx.study.design.commad;

/**
 * 政治家
 */
public class Politician implements Command {
    public void execute( ) {
        //do Politician's command
        System.out.println("开始巡查");
    }
}

 

package xx.study.design.commad;

/**
 * 程序设计人员
 */
public class Programmer implements Command {
    public void execute( ) {
        //do programmer's command
        System.out.println("开始设计");

    }
}

 

package xx.study.design.commad;

import java.util.ArrayList;
import java.util.List;

/**
 * 将三个command封装起来,扔到黑盒子 List 里去:
 */
public class Producer {
    public static List produceRequests() {
        List queue = new ArrayList();
        queue.add( new Engineer() );
        queue.add( new Politician() );
        queue.add( new Programmer() );
        return queue;
    }
}

 

package xx.study.design.commad;

import java.util.Iterator;
import java.util.List;

public class Customer {
    public static void main(String[] args) {
        //下发指令
        List queue = Producer.produceRequests();
        //调用者基本只和接口打交道,不合具体实现交互,这也体现了一个原则,面向接口编程
        for (Iterator it = queue.iterator();it.hasNext(); ){
            //客户端直接调用 execute 方法,无需知道被调用者的其它更多类的方法名。
            ((Command)it.next()).execute();
        }


    }
}

 

本文地址:https://blog.csdn.net/h4241778/article/details/107887773

如您对本文有疑问或者有任何想说的,请 点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网