zoukankan      html  css  js  c++  java
  • java设计模式-Command模式

    1.背景:                  

    站在MM的角度,想命令追求者Boy干什么就干什么,而且将来还可以扩展,怎么做?
     
    2.代码:                  
    Command.java:
    package com.cy.dp.command;
    
    public abstract class Command {
        
        public abstract void execute();        //执行命令
        public abstract void undo();        //取消执行命令
        
    }

    Command的实现类ShoppingCommand:(逛街命令)

    package com.cy.dp.command;
    
    public class ShoppingCommand extends Command {
    
        @Override
        public void execute() {
            System.out.println("zoo");
        }
    
        @Override
        public void undo() {
            System.out.println("undo zoo");
        }
    
    }
    View Code

    Command的实现类HugCommand:(拥抱命令)

    package com.cy.dp.command;
    
    public class HugCommand extends Command{
    
        @Override
        public void execute() {
            System.out.println("hug");
        }
    
        @Override
        public void undo() {
            System.out.println("open your arms");
        }
    
    }
    View Code

    Boy.java:

    package com.cy.dp.command;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class Boy {
        private String name;
        private List<Command> commands = new ArrayList<Command>();
        //private List<Command> doCommands;        装的是已经执行过的command,用于undo
        
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
        
        public void pursue(MM mm){
        }
        
        public void executeCommands(){
            for(Command c : commands){
                c.execute();
            }
        }
        public void undoCommands(){
            //循环doCommands来undo
            //用栈来操作,最后执行的操作先undo
        }
        
        
        public void addCommand(Command c){
            this.commands.add(c);
        }
        
    }

    MM.java:

    package com.cy.dp.command;
    
    public class MM {
        private String name;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
        
        //MM命令Boy做什么
        public void order(Boy b){
            Command c1 = new ShoppingCommand();
            Command c2 = new HugCommand();
            b.addCommand(c1);
            b.addCommand(c2);
            b.executeCommands();
        }
    }
  • 相关阅读:
    30以后,程序员一定要转管理岗吗?
    C#调用Bartender打印绑定数据库,动态设置Sql
    记一次 加载大量数据时不影响界面UI的经历
    火狐浏览器安装印象笔记剪藏
    VS自定义模板-以自定义类模板为样例
    x86架构下win 系统下使用Vmware+ubantu+qemu 模拟arm64架构+Kylin系统
    ES6操作数组的7中方法
    Vue 动态绑定CSS样式
    C# 使用HtmlAgilityPack 抓取 网站链接
    elementui——表格的相同内容单元格合并
  • 原文地址:https://www.cnblogs.com/tenWood/p/9136659.html
Copyright © 2011-2022 走看看