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

    模式导读:

         无论是小学高中还是大学,甚至走向社会,你都会发现阶级的存在,时刻保持对上一层阶级的尊重,同时努力完成他们给我们的任务,学生时刻保持对教师的尊重,员工保持对老板,领导们的尊重,他们给我们的作业我们都会去积极的完成,他们每发放一个命令我们都得去努力执行,而他们并不需要关注你执行命令的过程,你只需要将结果反馈就好,这便是命令模式。

    参考类图:

    代码实现:

    1.首先要有一个抽象的命令类,里面包含对具体执行命令的对象的引用,同时给一个抽象的执行命令的方法

    1 package com.etc;
    2 //抽象的命令
    3 public abstract class Command {
    4     //接到命令干活的具体工人
    5     public Worker worker=new Worker();
    6     //命令执行方法
    7     abstract void execute();
    8 }

    2.定义一个抽象的执行命令员工角色,里面有抽象的各种命令执行方法

     1 package com.etc;
     2 
     3 public abstract class abstractWorkMan {
     4      //加班
     5      abstract void overWork();
     6      //端茶
     7      abstract void serveTea();
     8      //倒水
     9      abstract void serveWater();
    10          
    11     
    12 }

    3.具体的员工角色

     1 package com.etc;
     2 
     3 public class Worker extends abstractWorkMan{
     4 
     5     @Override
     6     void overWork() {
     7         System.out.println("任务怎么还没完成,今天加班!");    
     8     }
     9     @Override
    10     void serveTea() {
    11         System.out.println("小王啊,给我倒杯茶过来!");
    12     }
    13     @Override
    14     void serveWater() {
    15         System.out.println("小王啊,给我倒杯水过来!");
    16     }
    17 }

    4.定义一个老板角色,具有设置命令和通知员工执行命令的方法

     1 package com.etc;
     2 //老板,具有发布命令和通知的权限
     3 public class Boss {
     4     private Command command;
     5     
     6     public Command getCommand() {
     7         return command;
     8     }
     9     //下达命令
    10     public void setCommand(Command command) {
    11         this.command=command;
    12     }
    13     //命令通知执行
    14     public void Notify() {
    15       command.execute();
    16     }
    17 }

    5.命令的具体执行类

     1 package com.etc;
     2 //具体的命令实现
     3 public class WorkCommand extends Command{
     4 
     5     @Override
     6     void execute() {
     7         //调用父类保持的对worker对象引用的下面的具体实现方法
     8         super.worker.overWork();
     9         super.worker.serveTea();
    10         super.worker.serveWater();
    11 
    12     }
    13 
    14 }

    6.客户端角色,实现情景模拟

     1 package com.etc;
     2 //具体的情景类
     3 public class Client {
     4 
     5     public static void main(String[] args) {
     6         //具体命令对象
     7         Command command=new WorkCommand();
     8         Boss boss=new Boss();
     9         //老板设置命令
    10         boss.setCommand(command);
    11         //通知命令执行
    12         boss.Notify();
    13     }
    14 
    15 }

    效果截图:

    命令模式优缺点:

    优点:

    • 实现客户端和接受者之间的解耦。
    • 可以动态的添加新的命令。
    • 只需要调用同一个方法(execute()方法)便可以实现不同的功能。

    缺点:

    •  实现一个具体的命令系统,可能要创建很多的具体命令对象。

    适用场景:

    • 只要有命令就离不开命令模式。

     

  • 相关阅读:
    CentOS7设置tomcat开机自启动
    MySQL复制表结构和表数据
    SpEL表达式总结
    Flink快速入门
    Flink架构、原理与部署测试
    第十一篇:Spark SQL 源码分析之 External DataSource外部数据源
    第十篇:Spark SQL 源码分析之 In-Memory Columnar Storage源码分析之 query
    第九篇:Spark SQL 源码分析之 In-Memory Columnar Storage源码分析之 cache table
    第八篇:Spark SQL Catalyst源码分析之UDF
    第七篇:Spark SQL 源码分析之Physical Plan 到 RDD的具体实现
  • 原文地址:https://www.cnblogs.com/weekstart/p/10767278.html
Copyright © 2011-2022 走看看