美文网首页
命令模式

命令模式

作者: 明朗__ | 来源:发表于2017-02-28 11:03 被阅读6次

    定义:

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

    案例:(皇帝命令将军)

    1. 定义命令的接口,声明执行的方法
    //皇帝通过圣旨命令将军
    public interface Command {
        void excute();
        void back();
    }
    
    1. ConcreteCommand:命令接口实现对象,是“虚”的实现 具体的命令实现对象(可以有多个不同的实现 实现多个不同的功能---扩展)
    public class AttachCommand implements Command {
        private Army army;//持有接受者的具体对象(军队)
    
        public AttachCommand(Army army) {
            this.army = army;
        }
    
        @Override
        public void excute() {
            army.attack();//调用接受者的具体方法 来完成具体的命令
        }
    
        @Override
        public void back() {
            army.back();
        }
    }
    
    1. Receiver:接收者,真正执行命令的对象
    //军队
    public class Army {
        //军队持有士兵引用
        private Soldier soldier;
    
        public Army(Soldier soldier) {
            this.soldier = soldier;
        }
        public  void attack(){
            soldier.setAttach("攻打齐国");
            System.out.print(soldier.getAttach()+"\n");
        }
        public void back(){
            soldier.setBack("撤退");
            System.out.print(soldier.getBack());
        }
    }
    
    //士兵
    public class Soldier {
        private String attach;//进攻
        private String back;//撤退
    
        public String getAttach() {
            return attach;
        }
    
        public String getBack() {
            return back;
        }
    
        public void setAttach(String attach) {
            this.attach = attach;
        }
    
        public void setBack(String back) {
            this.back = back;
        }
    }
    
    1. Invoker请求者角色
    //将军 
    public class General {
        private Command unCommand;
        private  Command attackCommand;
    
        public General() {
            //构建士兵
            Soldier soldier=new Soldier();
            //构建军队
            Army army=new Army(soldier);
            //将军指挥军队(命令)
            unCommand=new UndoCommand(army);//进攻命令
            attackCommand =new AttachCommand(army);//撤退命令
        }
    
        /**
         * 皇帝调用进攻方法
         */
        public  void attach(){
            attackCommand.excute();
        }
        /**
         * 皇帝调用撤退方法
         */
        public void undo(){
            unCommand.back();
        }
    }
    
    1. 皇帝调用 Client称为装配者
    public class Client {
        public static void main(String[] args){
            General general=new General();
            general.attach();//进攻
            general.undo();//撤退
        }
    }
    

    相关文章

      网友评论

          本文标题:命令模式

          本文链接:https://www.haomeiwen.com/subject/wchxgttx.html