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虚拟机的相关知识,当然也是以笔者切身感受去写。

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

时间: 2024-08-06 19:56:27

java 之 命令模式(大话设计模式)的相关文章

Spring IOC 方式结合TESTGN测试用例,测试简单java的命令模式

java命令模式: 可以命令("请求")封装成一个对象,一个命令对象通过在特定的接收着上绑定一组动作来封装一个请求.命令对象直接把执行动作和接收者包进对象中,只对外暴露出执行方法的的接口,从而简单的达到动作的请求者和动作的执行者解耦的目的. 下面用一个简单的实例测试简单的命令模式,同时采用spring ioc的方式+testNG的测试方式,实现遥控器的遥控开灯的命令模式实现和测试. 1.建立命令接口,包含执行方法,命令对象必须要实现的,执行方法就是暴露的接口方法,提供于接收者调用. p

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

观察者模式,笔者以前做校验订单时用过一次,只是不知道有这个模式,当时使用观察者省略了N多if else 在笔者看来观察者模式比较试用于一个对象状态改变后,很多个对象也要根据这个状态做相应的动作,当然观察者模式只是给大家开了一扇门,更希望的是灵活运用,而不是拘泥于细节, 我们可以从中汲取到把实现相同接口的类来放到集合里,然后便利集合调取公共方法去完成相应的工作,先看下类图 大话设计模式-类图 基于类图笔者写了如下的简单的实例. /** * 通知者抽象接口 */ public interface I

命令模式——HeadFirst设计模式学习笔记

命令模式:将"请求"封装成对象,以便使用不同的请求.日志.队列等来参数化其他对象.命令模式也支持撤销操作. 设计原则: 把方法的调用封装起来,调用此对象不需要知道它内部具体是如何运行的,只需要知道包装成型的方法 命令模式的本质是对命令进行封装,将发出命令的责任和执行命令的责任分割开 将"动作请求者"从"动作执行者"中解耦,即将发出请求的对象和接受并执行请求的对象分离开来.两者通过命令对象沟通 命令模式的关键在于引入了抽象命令接口,且发送者针对抽象

简单工程模式 -- 大话设计模式

在今天,读书有时是件“麻烦”事.它需要你付出时间,付出精力,还要付出一份心境.--仅以<大话设计模式>来祭奠那逝去的…… 简单工厂的作用是实例化对象,不需要客户了解这个对象属于哪个具体子类.简单工厂实例化的类具有相同的接口或者基类,在子类相对固定或者不需要扩展的时候,可以使用简单工厂.如数据库生产工厂就可以使用简单工厂来实现. 1.简单的计算器实现 输入两个数和运算符,实现两数相加或者两数相减. 首先我们定义一个运算类,包含两个属性:数字A和数字B,还有一个获取结果的虚方法GetResult方

【大话设计模式】设计模式系统学习大合集

转载请注明出处:http://blog.csdn.net/column/details/designpatternbylmb.html 为了方便各位网友学习以及方便自己复习之用,将设计模式的系列内容按照由浅入深的学习顺序总结如下,点击相应的标题即可跳转到对应的文章. 大话设计模式-工厂模式 大话设计模式-单例模式 大话设计模式-原型模式 深复制VS浅复制(MemberwiseClone方法介绍) 大话设计模式-代理模式 大话设计模式-中介者模式 大话设计模式-策略模式 大话设计模式-装饰模式 大

&lt;六&gt;读&lt;&lt;大话设计模式&gt;&gt;之原型模式

原型模式也是很简单的一种模式,对于java来说已经有相应的接口了(Cloneable).关于原型模式<<大话设计模式>>是以投放简历作为例子讲解的,即我要投放很多简历,其实每个简历都一样,所以只要我写好一份,其他的复制就行了,其实就是今天讲的原型模式,就是把要复制的类对象的属性复制到另外一个对象上(其实不是复制而是对象的引用改变). 原型模型:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 浅复制VS深复制 关于克隆有两个概念 浅复制:就是只复制值类型的字段,不能

命令模式:

命令模式 这个设计模式将对象封装成了一个请求获取操作,这个封装请求比一个原始的请求更加的灵活,且可以在对象之间传递,稍后存储,动态修改获取放到一个队 列之中.苹果公司是用Target-action机制和Invocation实现的,你可以在苹果的官方文档中去知道更多的关于Target- Action,但是Invocation使用包含一个Target对象的NSInvocation类,一个方法选择器和一些参数.这个对象可以根据需要动 态的改变和执行,在命令模式中这是一个完美的例子,它解除耦合了发送对象

大话设计模式_命令模式(Java代码)

命令模式:将一个请求封装成一个对象,从而使你可用不同的请求对客户进行参数化:对请求排队或记录请求日记,以及支持可撤销的操作. 简单描述:1个Receiver,知道如何执行命令.1个抽象命令,持有一个Receiver的引用,命令的执行则调用Receiver的对应方法(具体命令具体调用相应的方法).1个Invoker,只有命令的引用(可以是一个或多个),接收命令,并且执行命令的执行方法.客户端知道Receiver.生成命令给Invoker,由Invoker去调用命令自己的执行方法 大话设计模式中的截

大话设计模式_备忘录模式(Java代码)

备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到原先保存的状态. 简单描述:一个Memento类,代表Originator中要备份的属性.Originator负责生成备份和还原备份,CareTaker负责存储备份 大话设计模式中的截图: 例子代码: Memento类: 1 package com.longsheng.memento; 2 3 public class Memento { 4 5 private String sta