zoukankan      html  css  js  c++  java
  • 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虚拟机的相关知识,当然也是以笔者切身感受去写。

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

  • 相关阅读:
    Prim+堆优化
    Tarjan缩点+建新图
    CF482A
    CF545C
    CF570B
    Python 入门2 list介绍
    Python 入门1 上传代码
    黑客与画家 第十三章
    黑客与画家 第十一章
    黑客与画家 第五章
  • 原文地址:https://www.cnblogs.com/zhuxiansheng/p/8066336.html
Copyright © 2011-2022 走看看