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

     2022-03-27     503

关键词:

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

先看下类图

大话设计模式-类图

技术分享图片

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

在现在的工作中笔者查看设计模式时,基本上都是直接看类图,不会再去看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虚拟机的相关知识,当然也是以笔者切身感受去写。

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

java之状态模式(大话设计模式)

看过大话设计模式的小伙伴,都知道大话设计模式中的demo代码不是JAVA的,对于编程来说,设计模式不限于任何语言,讲述的是编程的思想。今天笔者再次看这篇文章时,看了下别人的博客对于设计模式的理解,希望能汲取点其... 查看详情

java之备忘录模式(大话设计模式)

...会经常用到吧!当然这只是笔者的推断。先看下类图大话设计模式-类图再继续看下Demo吧/***需要保存的进度信息类*/publicclassRoleSateMemento{privateIntegeratk;privateIntegervit;privateIntegerattack;publicRoleS 查看详情

java之模板模式(大话设计模式)

...用过,而且大家都比较喜欢这个模式,先看一下类图大话设计模式-类图作为一个程序员,不懂得“偷懒“,在笔者看来不是很合格哦!当我们编写程序时,发现很多个类所走的流程基本一致,只是少部分差异,这时我们就需要... 查看详情

java之桥接模式(大话设计模式)

...它的实现部分分离,使它们都可以独立的变化。第一次看设计模式的时候,不是很清楚这句话的意思,随着笔者的不断开发,发现有一种场景,继承关系多了,不易于维护父类,而笔者认为桥接模式的出现很好的解决了这个问题... 查看详情

java之代理模式(大话设计模式)

...买可乐就是需要做的行为。这是笔者理解的代理模式大话设计模式-类图要想实现代理,那么代理类和被代理的类就都要实现一个共同的接口,就刚刚买可乐的例子,我和我的室友都可以买可乐。代理类可以动态的去做一些事情... 查看详情

java之抽象工厂模式(大话设计模式)

...们还是要吸取其思想而不是生搬硬套。来看下类图:大话设计模式-类图看类图已经很乱了,来简单的梳理下。我们只看接口,这样就不难看出实际上是抽象工厂生产抽象产品的过程,而具体实现都是各自的实现类来做。看下具... 查看详情

java之观察者模式(大话设计模式)

...利集合调取公共方法去完成相应的工作,先看下类图大话设计模式-类图基于类图笔者写了 查看详情

java之外观模式(大话设计模式)

外观设计模式,很多人都已经使用过,只是不知其名,一般一个很nice的系统,模块化做的都很不错,这样如果新来一个业务,只需要把各个模块组装起来就可以满足新的业务,从程序的角度来说,就是我们只需要开一个类,然... 查看详情

大话设计模式之中介者模式

中介者模式  用一个中介对象来封装一系列对象的交互。中介者使各个对象不需要显示的相互引用,从而使其耦合松散,而且可以独立的改变他们之间的交互。涉及到的角色描述  -Mediator:抽象中介者角色,定义了同事对象... 查看详情

大话设计模式之简单工厂模式(代码片段)

大话设计模式——简单工厂模式--参考自《大话设计模式》需求现在有一个需求,实现一个简单的计算器对于一般的初学者来说可能会这么实现:publicclasscalculatepublicstaticvoidmain(String[]args)Scannercin=newScanner(System.in);System.out.println(&qu... 查看详情

大话设计模式之策略模式

策略模式  定义了一系列的算法,分别封装起来,让他们之间可以互相替换。此模式让算法的改变不会影响到使用算法的客户。  在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的context对... 查看详情

大话设计模式第八章之简单工厂模式

   简单工厂模式 工厂方法模式     packagecom.dp.factory;interfaceIFactory{CalculatorCreateCalculator();}classAddFactoryimplementsIFactory{@OverridepublicCalculatorCreat 查看详情

大话设计模式之简单工厂模式

简单工厂模式  最近朋友推荐了一本书《大话设计模式》,此书刚刚到,博主也还没开始看,希望以博文的方式与大家一起分享,一起学习.简单工厂模式,也就是说,到底要实列化谁,将来会不会增加实列化的对象,比如增加开根运算,... 查看详情

大话设计模式之桥接模式

桥接模式  将抽象部分与他的实现部分分离,使他们可以独立的变化  抽象与实现分离并不是说让抽象类与其派生类分离,因为这没有任何意义。实现是指抽象类和它的派生类用来实现自己的对象.桥接模式主要包含如下几... 查看详情

大话设计模式之代理模式(代码片段)

代理模式是为了隐藏真实对象,为其提供一种代理以控制对这个对象的访问。UML类图: 公用接口Subject类:1/**2*定义共有接口3*/4publicinterfaceSubject56voidresquest();7真实对象RealSubject类:1/**2*真实实现3*/4publicclassRealSubjectimplementsSubj... 查看详情

大话设计模式之组合模式

组合模式  将对象组合成树形结构以表示‘部分--整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性涉及到的角色描述  在组合模式结构图中包含如下几个角色:      ●&nbs... 查看详情

大话设计模式之原型模式

  原型模式 定义: 用原型实例制定创建对象的种类,并通过拷贝这些原型。创建新的对象。 实质: 就是从一个对象在创建还有一个可定制的对象。并且不须要知道不论什么创建的细节。 核心:(1)... 查看详情

大话设计模式之策略模式(代码片段)

背景:商场促销期间,可能会出现8折、5折的促销活动,也可能出现满100减10、满200减30的促销活动,设计一个收银系统。策略模式:定义了算法家族,让它们之间可以互相替换,此模式让算法的变化不会影响到使用算法的客户。... 查看详情