博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式-12-命令模式
阅读量:5330 次
发布时间:2019-06-14

本文共 6015 字,大约阅读时间需要 20 分钟。

简介:以对象来代表实际行动,命令对象可以把行动(action) 及其参数封装起来,这些行动可以被

  • 重复多次
  • 取消(如果该对象有的话)
  • 取消后又再重做

目的:

总结:

 

组成:对象,行动

1,对象

package com.design.l.command;/** * 程序设计员 */public class Programmer {        private String userName;    public Programmer(String userName) {        super();        this.userName = userName;    }            public void handleDemand(){        System.out.println("程序员 : " + userName + " ,正在处理新需求 ... ...");    }    public void handleBug(){        System.out.println("程序员 : " + userName + " ,正在处理Bug ... ...");    }    public void handleProblem(){        System.out.println("程序员 : " + userName + " ,正在处理线上问题 ... ...");    }    public String getUserName() {        return userName;    }    public void setUserName(String userName) {        this.userName = userName;    }}

 

package com.design.l.command;import java.util.ArrayList;import java.util.Arrays;import java.util.List;/** * 产品经理 */public class ProductManager {        //任务集合    private List
taskList; //程序员 private List
programmerList; private static final int TASK_MAX_NUM = 4;//任务最大数量 private int idx = 0; public ProductManager(Programmer ... programmers) { super(); this.taskList = new ArrayList<>(); this.programmerList = Arrays.asList(programmers); } //新增任务 public void addTaskToProduct(TaskService taskService){ taskList.add(taskService); } //分配任务 public void assignments(){ TaskService[] copy = new TaskService[taskList.size() > TASK_MAX_NUM ? taskList.size() - TASK_MAX_NUM : 0]; for ( int i = 0; i < TASK_MAX_NUM && i < taskList.size(); i ++){ taskList.get(i).handle(); } System.arraycopy(taskList.toArray(), TASK_MAX_NUM > taskList.size() ? taskList.size() : TASK_MAX_NUM, copy, 0, copy.length); taskList = Arrays.asList(copy); } //获取程序员 public Programmer chooseProgrammer(){ return programmerList.get(idx == programmerList.size() ? 0 : idx ++); } //打印出未处理的任务 public void printTask(){ if(taskList == null || taskList.size() == 0){ System.out.println("----无任务----"); return ; } System.out.println("----剩余任务----"); for(TaskService task : taskList){ System.out.println(task); } }}

 

package com.design.l.command;/** * 销售人员 */public class Sales {        private String userName;    private ProductManager productManager;//产品经理        public Sales(String userName) {        super();        this.userName = userName;    }    public Sales(String userName, ProductManager productManager) {        super();        this.userName = userName;        this.productManager = productManager;    }            public void putDemand(){        System.out.println("业务员 : " + userName + ", 提出新需求  ... ... ");        productManager.addTaskToProduct(new DemandTaskServiceImpl(productManager.chooseProgrammer()));    }    public void putBug(){        System.out.println("业务员 : " + userName + ", 提出新Bug  ... ... ");        productManager.addTaskToProduct(new BugTaskServiceImpl(productManager.chooseProgrammer()));    }    public void putProblem(){        System.out.println("业务员 : " + userName + ", 提出线上问题     ... ... ");        productManager.addTaskToProduct(new ProblemTaskServiceImpl(productManager.chooseProgrammer()));    }        public String getUserName() {        return userName;    }    public void setUserName(String userName) {        this.userName = userName;    }    public ProductManager getProductManager() {        return productManager;    }    public void setProductManager(ProductManager productManager) {        this.productManager = productManager;    }}

 

2,行为

package com.design.l.command;/** * 任务接口 */public interface TaskService {    /**     * 任务处理方法     */    void handle();}

 

package com.design.l.command;/** * 新需求任务 */public class DemandTaskServiceImpl implements TaskService {        private Programmer programmer;    public DemandTaskServiceImpl(Programmer programmer) {        super();        this.programmer = programmer;    }    @Override    public void handle() {        programmer.handleDemand();    }}

 

package com.design.l.command;/** * Bug任务 */public class BugTaskServiceImpl implements TaskService {        private Programmer programmer;    public BugTaskServiceImpl(Programmer programmer) {        super();        this.programmer = programmer;    }    @Override    public void handle() {        programmer.handleBug();    }}

 

package com.design.l.command;/** * 线上问题任务 */public class ProblemTaskServiceImpl implements TaskService {    private Programmer programmer;    public ProblemTaskServiceImpl(Programmer programmer) {        super();        this.programmer = programmer;    }    @Override    public void handle() {        programmer.handleProblem();    }}

 

3,Main

package com.design.l.command;/** * 12-命令模式 */public class MainTest {        public static void main(String[] args) {                Programmer programmerA = new Programmer("程序员A");        ProductManager productManager = new ProductManager(programmerA);        Sales salesA = new Sales("业务员A", productManager);        Sales salesB = new Sales("业务员B", productManager);        Sales salesC = new Sales("业务员C", productManager);        Sales salesD = new Sales("业务员D", productManager);                salesA.putDemand();        salesA.putBug();        salesB.putProblem();        salesC.putBug();        salesD.putProblem();                productManager.assignments();        productManager.printTask();                productManager.assignments();        productManager.printTask();    }}

4,Result

业务员 : 业务员A, 提出新需求  ... ... 业务员 : 业务员A, 提出新Bug  ... ... 业务员 : 业务员B, 提出线上问题     ... ... 业务员 : 业务员C, 提出新Bug  ... ... 业务员 : 业务员D, 提出线上问题     ... ... 程序员 : 程序员A ,正在处理新需求 ... ...程序员 : 程序员A ,正在处理Bug ... ...程序员 : 程序员A ,正在处理线上问题 ... ...程序员 : 程序员A ,正在处理Bug ... ...----剩余任务----com.design.l.command.ProblemTaskServiceImpl@15db9742程序员 : 程序员A ,正在处理线上问题 ... ...----无任务----

 

转载于:https://www.cnblogs.com/wanhua-wu/p/7222093.html

你可能感兴趣的文章
字符串类型的相互转换
查看>>
基础学习:C#中float的取值范围和精度
查看>>
web前端面试题2017
查看>>
【Crash Course Psychology】2. Research & Experimentation笔记
查看>>
关于 linux 的 limit 的设置
查看>>
MTK笔记
查看>>
ERROR: duplicate key value violates unique constraint "xxx"
查看>>
激活office 365 的启动文件
查看>>
无法根据中文查找
查看>>
[简讯]phpMyAdmin项目已迁移至GitHub
查看>>
转载 python多重继承C3算法
查看>>
【题解】 bzoj1597: [Usaco2008 Mar]土地购买 (动态规划+斜率优化)
查看>>
css文本溢出显示省略号
查看>>
git安装和简单配置
查看>>
fat32转ntfs ,Win7系统提示对于目标文件系统文件过大解决教程
查看>>
Awesome Adb——一份超全超详细的 ADB 用法大全
查看>>
shell cat 合并文件,合并数据库sql文件
查看>>
Android 将drawable下的图片转换成bitmap、Drawable
查看>>
介绍Win7 win8 上Java环境的配置
查看>>
Linux设置环境变量的方法
查看>>