android常用设计模式之命令模式

一.定义

将一个请求封装成一个对象,从而让用户使用不同的请求把客户端参数化;对请求队列或者记录请求日志,以及支持可撤销的操作。

二.角色

1.Receiver(接收者角色),负责执行具体的请求。

2.Command(命令角色),申明需要执行的所有命令。

3.ConcreteCommand(具体命令角色),命令角色的具体实现,通常会持有接收者,并调用接收者来处理命令。

4.Invoker(调用者角色),接收到命令,并执行命令。

三.优缺点

 优点

  实现解偶,调用者和接收者分离,不存在依赖。

  容易扩展

缺点

  随着命令越多,类就要不断的增加。

四.使用说明

   我们以遥控器控制电视为例子说明:

 1.命令角色-定义一个命令角色接口

/**
 * 命令模式-命令角色,
 */
public interface ICommand {
    void execute();//执行命令的方法
}

2.命令接收者角色-这里的命令接收者就是电视:

/**
 * 命令模式-命令接收者:电视
 */
public class TvReceiver {
    public void receiver(){
        System.out.print("接收到命令");
    }
}

3.具体的命令角色:

/**
 * 命令模式-具体命令角色
 */
public class ChangeCommand implements ICommand{
    protected TvReceiver mTvReceiver;
    public ChangeCommand(TvReceiver tvReceiver){
        this.mTvReceiver = tvReceiver;
    }
    @Override
    public void execute() {
        System.out.print("这里具体的命令就是-更换频道");
        mTvReceiver.receiver();//调用接收者
    }
}

4.调用者角色:

public class Invoker {
    private ICommand mIcommand;
    public Invoker(ICommand iCommand){
        this.mIcommand = iCommand;
    }

    public void action(){
        mIcommand.execute();
    }
}

四.在android中的使用:

 在Android中 Handler就使用了命令模式,

Message:我们知道Handler在Android中使用来处理消息(Message)所以这里Message就是命令模式中的命令角色;

Lopper:还有一个Looper负责从消息队列中不断轮询然后取出消息,所以Looper就是命令模式中的调用者角色。

Handler:Handler就负责执行消息的发送和处理操作就是接收者角色。

猜你喜欢

转载自blog.csdn.net/liulanzaijia/article/details/89015641