码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式之命令模式

时间:2015-07-17 00:11:49      阅读:107      评论:0      收藏:0      [点我收藏+]

标签:

命令模式

将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或者记录请求日志,以及支持可撤销的操作。

Command

package com.hml.command;

public abstract class Command {

    protected Receiver receiver;

    public Command(Receiver receiver) {
        this.receiver = receiver;
    }
    
    public abstract void excute();
    
}

ConcretaeCommand

package com.hml.command;

public class ConcretaeCommand extends Command {

    public ConcretaeCommand(Receiver receiver) {
        super(receiver);
    }

    @Override
    public void excute() {
        receiver.action();
    }

}

Receiver

package com.hml.command;

/**
 * 该类知道如何去处理命令 ,不同的命令可以有不同的Receiver
 */
public class Receiver {

    public void action() {
        System.out.println("Receiver");
    }

}

Invoker

package com.hml.command;

public class Invoker {
    private Command command;

    public Command getCommand() {
        return command;
    }

    public void setCommand(Command command) {
        this.command = command;
    }
    
    public void excute() {
        command.excute();
    }
}

Test

package com.hml.command;

public class Test {
    public static void main(String[] args) {
        Receiver r = new Receiver();
        Command command = new ConcretaeCommand(r);
        Invoker i = new Invoker();
        i.setCommand(command);
        i.excute();

    }
}

类图
技术分享

 

命令模式的优点:

1、比较容易设计命令队列

2、可以容易的将命令记录日志

3、接收请求方可决定是否接收请求

4、可以容易的实现请求撤销和重做

5、增加新的命令不影响其他的类,因此增加新的命令类很容易

 

设计模式之命令模式

标签:

原文地址:http://www.cnblogs.com/heml/p/4652522.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!