学校中、生活中、社会中总是会存在一定的阶层,虽然我们很多人都不可认可阶层的存在。命令这一词也就在阶层中诞生。家长命令孩子,老师命令学生,领导命令小娄娄。这些都在我们的生活存在的东西,相信这一个模式学习起来也会比较简单的。这次我们就举一个领导命令员工的例子来学习命令模式。

  工作中领导经常会叫(命令)你去做一些事情,但是领导并不关心你怎么做的,只需要知道你做的结果就好了。怎么做是你自己的事情,做不好就等着加班吧(开玩笑的,一般都会说自己自愿的,哈哈),做的好功劳也不好是你的,哈哈好像有点小黑暗。一般大领导会叫小领导做事情,小领导才叫小娄娄。然后功劳你懂的。不多说了,说多了都是泪。开始码代码。

  既然是命令就要有命令呀,先定义一个命令吧。

  1. package com.roc.command;
  2. /**
  3. * 命令
  4. * @author liaowp
  5. *
  6. */
  7. public abstract class Command {
  8.  
  9. protected CodeWorkMan codeWorkMan=new CodeWorkMan();//定义一个程序员
  10.  
  11. /**
  12. * 执行命令
  13. */
  14. public abstract void execute();
  15. }

  还是需要一个小娄娄呢,简称工作人员,能写文档、能写代码、还需要能加班。

  1. package com.roc.command;
  2.  
  3. public abstract class WorkMan {
  4. /**
  5. * 写文档
  6. */
  7. public abstract void writeDocument();
  8.  
  9. /**
  10. * 工作
  11. */
  12. public abstract void work();
  13.  
  14. /**
  15. * 加班
  16. */
  17. public abstract void overWork();
  18. }

  需要具体的人员吧,不然怎么体现领导的价值呢。就来一个程序员吧

  1. package com.roc.command;
  2. /**
  3. * 程序员
  4. * @author liaowp
  5. *
  6. */
  7. public class CodeWorkMan extends WorkMan{
  8.  
  9. public void writeDocument() {
  10. System.out.println("写文档中。。。。。。。。");
  11. }
  12.  
  13. public void work() {
  14. System.out.println("叫你上班就上班,废话撒。。。。。。。。。");
  15. }
  16.  
  17. public void overWork() {
  18. System.out.println("领导一句加班,加班中。。。。。。。。。。。");
  19. }
  20.  
  21. }

需要一个小领导吧,不然没有人管理程序员呀,那就创建一个领导吧。

  1. package com.roc.command;
  2. /**
  3. * 小领导,一般大领导不会直接给员工下命令。
  4. * @author liaowp
  5. *
  6. */
  7. public class LittleLead {
  8.  
  9. private Command command;
  10.  
  11. public Command getCommand() {
  12. return command;
  13. }
  14.  
  15. public void setCommand(Command command) {
  16. this.command = command;
  17. }
  18.  
  19. public void action(){//小领导执行命令,小领导在叫员工执行
  20. command.execute();
  21. }
  22.  
  23. }

需要具体的执行命令,不然不知道应该干嘛呢。那就来一个执行命令

  1. package com.roc.command;
  2. /**
  3. * 程序员执行命令
  4. * @author liaowp
  5. *
  6. */
  7. public class CodeCommand extends Command{
  8.  
  9. public void execute() {
  10. super.codeWorkMan.work();//工作
  11. super.codeWorkMan.overWork();//加班
  12. super.codeWorkMan.writeDocument();//写文档
  13. }
  14.  
  15. }

这样好的场景需要有一个场景模拟吧,客户端咯

  1. package com.roc.command;
  2. /**
  3. * 模拟大领导 命令模式
  4. * @author liaowp
  5. *
  6. */
  7. public class Client {
  8. public static void main(String[] args) {//领导发命令,并不用关心你的工作,发命令就可以。具体怎么搞,你们自己搞去
  9. Command command=new CodeCommand();//命令
  10. LittleLead lead=new LittleLead(); //小领导
  11. lead.setCommand(command);
  12. lead.action();
  13. }
  14. }

整个命令模式就是领导发命令叫你干事情,并不用管你怎么搞,发出一条命令,命令需要先思考,先生成命令,然后领导想到命令了,领导发命令,干事情的是程序员。命令模式,果然有点叼呀。

java设计模式之命令模式的更多相关文章

  1. 折腾Java设计模式之命令模式

    博客原文地址 折腾Java设计模式之命令模式 命令模式 wiki上的描述 Encapsulate a request as an object, thereby allowing for the pa ...

  2. Java设计模式 之 命令模式

    1      从属模式分类 行为性模式 2      命令模式意图 命令模式可将动作的请求者和动作的执行者对象中解耦. 该模式将一个行为操作发起者的请求封装到对象中,该请求由另外一个对象执行. 将动作 ...

  3. JAVA设计模式之 命令模式【Command Pattern】

    一.概述 命令模式能够将请求发送者和接收者全然解耦.发送者与接收者之间没有直接引用关系,发送请求的对象仅仅须要知道怎样发送请求,而不必知道怎样完毕请求.核心在于引入了命令类,通过命令类来减少发送者和接 ...

  4. 14.java设计模式之命令模式

    基本需求: 一套智能家电,有照明灯.风扇.冰箱.洗衣机,我们只要在手机上安装app就可以控制对这些家电工作 这些智能家电来自不同的厂家,我们不想针对每一种家电都安装一个App分别控制,我们希望只要一个 ...

  5. java设计模式之命令模式以及在java中作用

    命令模式属于对象的行为模式.命令模式又称为行动(Action)模式或交易(Transaction)模式. 命令模式把一个请求或者操作封装到一个对象中.命令模式允许系统使用不同的请求把客户端参数化,对请 ...

  6. 玉帝传美猴王上天,大闹天宫之Java设计模式:命令模式

    目录 示例 改进代码 命令模式 定义 意图 主要解决问题 何时使用 优缺点 玉帝传美猴王上天 命令模式和策略模式的区别 示例 系统需要设计一个命令行界面,用户可输入命令来执行某项功能,系统的功能会不断 ...

  7. 用Java 8 Lambda表达式实现设计模式:命令模式

    在这篇博客里,我将说明如何在使用 Java 8 Lambda表达式 的函数式编程方式 时实现 命令 设计模式 .命令模式的目标是将请求封装成一个对象,从对客户端的不同类型请求,例如队列或日志请求参数化 ...

  8. 折腾Java设计模式之状态模式

    原文地址 折腾Java设计模式之状态模式 状态模式 在状态模式(State Pattern)中,类的行为是基于它的状态改变的.这种类型的设计模式属于行为型模式.在状态模式中,我们创建表示各种状态的对象 ...

  9. Java设计模式——装饰者模式

    JAVA 设计模式 装饰者模式 用途 装饰者模式 (Decorator) 动态地给一个对象添加一些额外的职责.就增加功能来说,Decorator 模式相比生成子类更为灵活. 装饰者模式是一种结构式模式 ...

随机推荐

  1. 为Titanium创建自己的安卓推送模块

    在手机应用中,推送是一个非常重要的功能.相对来说ios应用的推送功能很容易做,因为它统一都是用苹果的APNS服务实现的.但安卓这边就比较混乱了,虽然谷歌也推出了类似苹果的官方推送服务,但由于谷歌的服务 ...

  2. Oracle基础和用户管理

    1.数据库的使用: 项目的规模:负载量(用户)有多大? 成本: 安全性:   (小型数据库)access.forbase 负载小 :100人以内,比如留言板,信息管理系统. 成本:千元以内. 安全性要 ...

  3. 总结CSS3新特性(Animation篇)

    动画(Animation),是CSS3的亮点.//之一 通过animation属性指定@keyframe来完成关键帧动画; @keyframe用法: @keyframes name { 0% { to ...

  4. Microsoft Dynamics CRM MVP

    MVP 一个响亮的名称, 不是 Kobe Bryant 不是 LeBron Raymone James 这是 Microsoft Dynamics CRM MVP 求证Link: http://mvp ...

  5. Failed to connect to JobMonApp on port 13491

    今天为了解决别的问题,把/etc/hosts文件里的 127.0.0.1 localhost改成了 127.0.0.1 DSETL ,结果运行作业的时候就报这个错:Failed to connect ...

  6. Autodesk 360 Viewer 已经发布到Autodesk 360平台

    我们之前已经在小范围内透露过,Autodesk 将发布一款完全无需插件的三维模型浏览器 Autodesk 360 Viewer,比如我们的Meetup线下小聚会,或者黑客马拉松(hackathon)的 ...

  7. UITableView相关知识点

    //*****UITableView相关知识点*****// 1 #import "ViewController.h" // step1 要实现UITableViewDataSou ...

  8. IrfanView 4.36 中文版发布了

    IrfanView 4.36 简体中文便携版 小而快的图片浏览器 仅仅不到2M的小软件,功能却能与体积大到几十M的ACDSee相媲美!这个软件就是IrfanView.图片.音频.视频浏览,图片批量格式 ...

  9. a标签加入单击事件 屏蔽href跳转页面

    我们常用的在a标签中有点击事件:1. a href="javascript:js_method();" 这是我们平台上常用的方法,但是这种方法在传递this等参数的时候很容易出问题 ...

  10. Enabling Cross-Origin Requests in ASP.NET Web API 2

    Introduction This tutorial demonstrates CORS support in ASP.NET Web API. We’ll start by creating two ...