• java 之 命令模式(大话设计模式)


    命令模式,笔者一直以为当我们开发的过程中基本上很难用到,直到维护阶段或者重构阶段,我们会发现有些撤销命令和追加命令比较频繁时,自然而然就用到命令模式。

    先看下类图

    大话设计模式-类图

    简单说下类图,最开始笔者看大话设计模式的时候也不是很喜欢看类图,主要原因是看不懂,后来当笔者第一次看完设计模式后,才真正意义上的理解类图。

    在现在的工作中笔者查看设计模式时,基本上都是直接看类图,不会再去看demo。所以在这里笔者鼓励大家多看类图,并明白类图的意义,也不用过于刻意去看,

    当大家明白一个设计模式后,再去重新看下类图,相信大家会有收获的。好了,先看下笔者的demo。

    /**
     * 烧烤师傅
     */
    public class Barbecue {
    
        public void makeMutton() {
            System.out.println("烤羊肉串");
        }
    
        public void makeChicken() {
            System.out.println("考鸡肉串");
        }
    }
    /**
     * 命令抽象父类
     */
    public abstract class Commond {
    
        private Barbecue barbecue;
    
        public Commond(Barbecue barbecue) {
            super();
            this.barbecue = barbecue;
        }
    
        public abstract void excuteCommond();
    
        public Barbecue getBarbecue() {
            return barbecue;
        }
    
        public void setBarbecue(Barbecue barbecue) {
            this.barbecue = barbecue;
        }
    }
    /**
     * 烤鸡翅命令
     */
    public class ChickenCommond extends Commond{
    
        public ChickenCommond(Barbecue barbecue) {
            super(barbecue);
        }
        @Override
        public void excuteCommond() {
            super.getBarbecue().makeChicken();
        }
    
    }
    /**
     * 烤羊腿命令
     */
    public class MuttonCommod extends Commond{
    
        public MuttonCommod(Barbecue barbecue) {
            super(barbecue);
        }
        @Override
        public void excuteCommond() {
            super.getBarbecue().makeMutton();
        }
    
    }
    /**
     * 服务员
     */
    public class Waiter {
    
        private List<Commond> commonds = new ArrayList<>();
    
        public void addCommond(Commond commond) {
            // TODO 可以做很多事情  记日志等等
            commonds.add(commond);
        }
    
        public void removeCommond(Commond commond) {
            // TODO 可以做很多事情  记日志等等
            commonds.remove(commond);
        }
    
        public void Notify() {
            for (Commond commond : commonds) {
                commond.excuteCommond();
            }
        }
    }
    /**
     * 客户端
     */
    public class Test {
    
        public static void main(String[] args) {
            Barbecue barbecue = new Barbecue();
            Commond commond = new ChickenCommond(barbecue);
            Waiter waiter = new Waiter();
            waiter.addCommond(commond);
            waiter.Notify();
        }
    }

    运行结果如下

    考鸡肉串

    大话设计模式一共24个设计模式,笔者坚持每天更新一篇,有时工作忙没能及时更新。大话设计模式更新完毕,笔者会更新JVM虚拟机的相关知识,当然也是以笔者切身感受去写。

    以上,希望能帮助学习命令模式的小伙伴。

  • 相关阅读:
    二维码
    文件下载
    相对路径使用的特殊符号
    Httpclient的使用
    MySQL比like语句更高效的写法
    jQuery中turn.js(翻页效果)学习笔记
    如何在忘记mysql的登录密码时更改mysql登录的密码(window及linux)
    详细介绍svn在eclipse中的使用(附图解说明)
    Xshell6远程访问linux及Xftp6远程针对linux系统中文件操作(附图文详解)
    利用workbench对linux/Ubuntu系统中的mysql数据库进行操作
  • 原文地址:https://www.cnblogs.com/zhuxiansheng/p/8066336.html
Copyright © 2020-2023  润新知