随笔-95  评论-31  文章-10  trackbacks-0
/**
 * 
@author LX
 * 通用Reveiver类
 
*/

public abstract class Receiver {
    
    
//抽象接收者,定义每个接收者必须完成的业务 
    public abstract void doSomething();
    
//撤销
    public abstract void undo();
}

/**
 *抽象Command类
 *
*/

public abstract class Command {
    
    
public abstract void execute();
    
public abstract void undo();
}

/**
 *调用者类
 *
*/

public class Invoker {
     
    
private Command command;
    
    
public void setCommand(Command command){
        
this.command=command;
    }

    
    
public void action(){
        
this.command.execute();
    }

}

/**
 *具体接收者
 *
*/

public class ConcreteReceiver1 extends Receiver {

    @Override
    
public void doSomething() {
    }


    @Override
    
public void undo() {
        
    }

}

/**
 *具体Command类
 *
*/

public class ConcreteCommand1 extends Command {
    
    
private Receiver receiver;
    
public ConcreteCommand1(Receiver receiver){
        
this.receiver=receiver;
    }

    
    @Override
    
public void execute() {
        receiver.doSomething();
    }


    @Override
    
public void undo() {
        receiver.undo();
    }

}

/**
 *测试类
 *
*/

public class Test {
    
    
public static void main(String[] args) {
        Invoker invoker 
= new Invoker();
        Receiver receiver 
= new ConcreteReceiver1(); //定义接收者
        Command command = new ConcreteCommand1(receiver);//定义一个发送给接收者的命令
        invoker.setCommand(command);//把命令交给调用者去执行
        invoker.action();
    }

}
//更完美的Command类
public abstract class Command {
    
//定义一个子类的全局共享变量
    protected final Receiver receiver;
    
//实现类必须定义一个接收者
    public Command(Receiver receiver){
        
this.receiver=receiver;
    }

    
//每个命令类都必须有一个执行命令的方法
    public abstract void execute();
}

public class ConcreteCommand1 extends Command{
    
    
//设置自己的默认构造
    public ConcreteCommand1(){
        
super(new ConcreteReceiver1());
    }

    
//设置新的接收者
    public ConcreteCommand1(Receiver receiver) {
        
super(receiver);
    }

    
//业务处理
    @Override
    
public void execute() {
        
super.receiver.doSomething();
    }

}

public class Test {
    
public static void main(String[] args) {
        Invoker invoker 
= new Invoker();
        Command command 
= new ConcreteCommand1(); //无需知道具体接收者
        invoker.setCommand(command);
        invoker.action();
    }

}
posted on 2010-09-06 23:42 朔望魔刃 阅读(250) 评论(0)  编辑  收藏 所属分类: 设计模式&&数据结构

只有注册用户登录后才能发表评论。


网站导航: