macro command java,命令模式Command(对象行为型)

参考文档:

1.设计模式-可复用面向对象软件的基础

2.http://blog.csdn.net/hguisu/article/details/7549895(设计模式 ( 十三 ) 命令模式Command(对象行为型))

命令模式Command(对象行为型)

理论方面的知识,可以参考   参考文档中的内容。这里讲一下代码实现。

看一下Command模式的结构:

0818b9ca8b590ca3270a3433284dd417.png

这里的案例,是设计模式书中,Command模式动机一节中的Command类的实现的大致框架。

我们将定义OpenCommand、PasteCommand、MacroCommand。首先是抽象的Command类:

Command.java:

package com.rick.designpattern.command;

import java.lang.reflect.InvocationTargetException;

/**

* Created by MyPC on 2017/6/13.

*/

public abstract class Command {

public Command() {

}

public abstract void execute() throws InvocationTargetException, IllegalAccessException;

}

OpenCommand.java:

package com.rick.designpattern.command;

/**

* Created by MyPC on 2017/6/13.

*/

public class OpenCommand extends Command {

private Application application;

public OpenCommand(Application application) {

this.application = application;

}

@Override

public void execute() {

String name = AskUser.getName();

if (null != name) {

Document document = new Document(name);

application.add(document);

document.open();

}

}

}

PasteCommand.java:

package com.rick.designpattern.command;

/**

* Created by MyPC on 2017/6/13.

*/

public class PasteCommand extends Command {

private Document document;

public PasteCommand(Document document) {

this.document = document;

}

@Override

public void execute() {

document.paste();

}

}

SimpleCommand.java:

package com.rick.designpattern.command;

import java.lang.reflect.InvocationTargetException;

import java.lang.reflect.Method;

/**

* Created by MyPC on 2017/6/13.

*/

public class SimpleCommand extends Command {

private T t;

private Method method;

public SimpleCommand(T t, Method method) {

this.t = t;

this.method = method;

}

@Override

public void execute() throws InvocationTargetException, IllegalAccessException {

method.invoke(t, null);

}

}

MacroCommand.java:

package com.rick.designpattern.command;

import java.lang.reflect.InvocationTargetException;

import java.util.ArrayList;

import java.util.List;

/**

* Created by MyPC on 2017/6/13.

*/

public class MacroCommand extends Command {

List commands = new ArrayList();

public void add(Command command) {

commands.add(command);

}

public void remove(Command command) {

commands.remove(command);

}

@Override

public void execute() throws InvocationTargetException, IllegalAccessException {

for (Command command : commands) {

command.execute();

}

}

}

Application.java:

package com.rick.designpattern.command;

/**

* Created by MyPC on 2017/6/13.

*/

public class Application {

private Document document;

public void add(Document document) {

this.document = document;

}

}

AskUser.java:

package com.rick.designpattern.command;

/**

* Created by MyPC on 2017/6/13.

*/

public class AskUser {

public static String getName(){

return "test.txt";

}

}

Document.java:

package com.rick.designpattern.command;

/**

* Created by MyPC on 2017/6/13.

*/

public class Document {

private String name;

public Document(String name) {

this.name = name;

}

public void open() {

System.out.println("Document in open is " + name);

}

public void paste() {

System.out.println("Document in paste");

}

}

MyClass.java:

package com.rick.designpattern.command;

/**

* Created by MyPC on 2017/6/13.

*/

public class MyClass {

public void handler() {

System.out.println("MyClass is handler");

}

}

Client.java:

package com.rick.designpattern.command;

import java.lang.reflect.InvocationTargetException;

/**

* Created by MyPC on 2017/6/13.

*/

public class Client {

public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {

MyClass receiver = new MyClass();

Command command = new SimpleCommand(receiver, receiver.getClass().getMethod("handler", null));

command.execute();

Document document = new Document("TEST.txt");

Application application = new Application();

OpenCommand openCommand = new OpenCommand(application);

openCommand.execute();

PasteCommand pasteCommand = new PasteCommand(document);

pasteCommand.execute();

MacroCommand macroCommand = new MacroCommand();

macroCommand.add(command);

macroCommand.add(openCommand);

macroCommand.add(pasteCommand);

macroCommand.execute();

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值