命令模式的定义
命令模式,将一组行为抽象为对象,实现二者之间的松耦合。这就是命令模式(Command Pattern)。
模型:
-
Invoker:调用者,就是接收到命令后负责调用
-
Receiver:接受者,也就是执行命令的人,最苦逼的
-
Command:命令者,封装好的命令类
下面通过通俗的实例来了解一下命令模式。
实例说明
既然命令,就拿“项目经理”-“开发人员”举例吧,比如有个外包的项目需要开发,开发完成后甲方要求改一改某个功能。下面用代码详细说明一下:
1.首先定义一个抽象的Receiver,因为开发人员不止一个人
public abstract class AbstractReceiver {
//写项目
public abstract void write();
//增删改项目
public abstract void change();
//提交程序
public abstract void ubmit();
}
2.定义具体的Receiver,这里假设有两个开发人员
public class ReceiverA extends AbstractReceiver{
@Override
public void write() {
Log.d("qzs","写代码");
}
@Override
public void change() {
Log.d("qzs","改需求");
}
@Override
public void submit() {
Log.d("qzs","提交");
}
}
public class ReceiverB extends AbstractReceiver {
@Override
public void write() {
Log.d("qzs","写代码");
}
@Override
public void change() {
Log.d("qzs","改需求");
}
@Override
public void submit() {
Log.d("qzs","提交");
}
}
3.定义Command,命令类,也就是刚才说的甲方要求改一改某个功能的命令,假如此功能是开发人员A改:
public abstract class AbstractCommand {
ReceiverA receiverA=new ReceiverA(); //开发人员A
ReceiverB receiverB=new ReceiverB(); //开发人员B
//执行
public abstract void excute();
}
public class ChangeFunctionCommand extends AbstractCommand {
@Override
public void excute() {
receiverA.change();
receiverA.submit();
}
}
4.定义Invoker类,也就是项目经理,负责安排调用
public class Invoker {
private AbstractCommand command;
//设置命令
public void setCommand(AbstractCommand command) {
this.command = command;
}
// 执行命令
public void Action(){
command.excute();
}
5.调用
//定义一个项目经理-张三
Invoker ZHANGSAN=new Invoker();
//定义修改功能的命令并执行
AbstractCommand command=new ChangeFunctionCommand();
ZHANGSAN.setCommand(command);
ZHANGSAN.Action();
运行后:
命令模式的优缺点及其他
1.优点:
-
降低对象之间的耦合度
-
新的命令可以很容易地加入到系统中
-
可以比较容易地设计一个组合命令
-
调用同一方法实现不同的功能
2.缺点:
使用命令模式可能会导致某些系统有过多的具体命令类。因为针对每一个命令都需要设计一个具体命令类,因此某些系统可能需要大量具体命令类,这将影响命令模式的使用。
3.使用场景:
-
需要对行为进行记录,撤销,重做,事务处理时
-
需要抽象出待执行的动作,然后以参数的形式提供出来
4.附加:
如果有人问了,撤销的操作怎么做,其实很简单。在抽象的接收类中定义一个“撤销”的方法。然后再定义一个撤销Command来增加这个撤销命令就好了。
本文学习参考了《设计模式之禅》以及网上信息...
相关推荐
本书浅显易懂的介绍了JAVA线程相关的设计模式,通过程序范例和UML图示来一一解说,书中代码的重要部分加了标注以使读者更加容易理解,再加上图文并茂,对于初学者还是程序设计高手来说,这都是一本学习和认识JAVA...
### 23种设计模式(通俗易懂篇) #### 创建型模式 1. **Factory(工厂模式)** - **应用场景**:当你需要为用户提供多种选择时,例如选择不同的餐厅来满足不同用户对食物的偏好。 - **原理**:在工厂模式中,...
最后,"23种设计模式详解.ppt"可能是一个包含幻灯片形式的教程,它可能以简洁明了的方式展示了23种设计模式,每种模式的关键点、示例代码和应用场景可能都有所提及,对于快速回顾或教学来说非常方便。 通过阅读这些...
### 设计模式详解 设计模式是在软件开发过程中针对常见的问题所总结出来的最佳实践,它能够帮助开发者更加高效地解决问题,并提高代码的复用性、扩展性和维护性。本篇文章将重点介绍四种常用的设计模式:策略模式、...
《Java与模式-清晰书签版》是一份包含多种Java设计模式详解的资源包,旨在帮助开发者深入理解和应用设计模式。这份资源集成了多种格式的文档,包括详细的文本描述、图表解析以及实际代码示例,使得学习过程更加直观...
3. **设计模式详解**: - 深入分析各种设计模式,如工厂模式、单例模式、装饰者模式等,并探讨它们在Node.js中的应用场景。 - 通过实例展示如何在实际项目中应用这些模式来解决问题。 4. **构建模块化和可扩展的...
在本书中,"HEAD_FIRST设计模式(中文版)"采用了易懂且生动的方式,将复杂的概念以图文并茂的形式呈现,使得读者能够更轻松地理解和掌握设计模式。以下是对几个关键设计模式的详解: 1. **工厂模式**:它是创建型...
"状态机设计模式详解" 在程序设计中,状态机是一种非常重要的概念。状态机是指程序在其生命周期内经过的一系列状态的抽象表示。今天,我们来讨论状态机的设计模式,特别是使用C语言实现状态机的策略。 传统的解决...
### Java设计模式——单例模式详解 #### 一、单例模式概述 单例模式是设计模式中的一个重要组成部分,属于创建型模式之一。其主要作用是确保某个类仅有一个实例存在,并提供一个全局访问该实例的方法。这在很多场景...
软件的设计非常人性化,摒弃了复杂的会计术语,而是采用了通俗易懂的方式,让非专业的会计人员也能迅速上手操作。这种“傻瓜会计”的理念,大大降低了企业实施信息化管理的门槛。 《管家婆》软件对不同行业有着极强...
多线程与并发处理是程序设计好坏优劣的重要课题,本书通过浅显易懂的文字与实例来介绍JAVA线程相关的设计模式概念,并且通过实际的JAVA程序范例和UML图示来一一解说,书中有代码的重要部分加上标注使读者更加容易...
多线程与并发处理是程序设计好坏优劣的重要课题,本书通过浅显易懂的文字与实例来介绍JAVA线程相关的设计模式概念,并且通过实际的JAVA程序范例和UML图示来一一解说,书中有代码的重要部分加上标注使读者更加容易...
书中不仅通过浅显易懂的文字和实例介绍了这些模式,还提供了丰富的UML图示和代码示例,以帮助读者更深入地理解每个设计模式的运用和实现。此外,本书还包括了Java线程基础内容的介绍、附录内容以及对每个设计模式的...
本文以通俗易懂的语言,详细介绍了23种设计模式。通过比喻和简单的例子,解释了每种设计模式的工作原理和用途,旨在帮助初学者理解并应用这些模式,以提高代码的质量和可维护性。 **适用人群**: 这篇文章适合编程...
本书浅显易懂的介绍了JAVA线程相关的设计模式,通过程序范例和UML图示来一一解说,书中代码的重要部分加了标注以使读者更加容易理解,再加上图文并茂,对于初学者还是程序设计高手来说,这都是一本学习和认识JAVA...
在电子工程领域,差模电压和共模电压是两种重要的概念,主要应用于...在实际工作中,通过阅读"详解差模电压和共模电压-简单易懂.pdf"这份参考资料,可以深入学习这两个概念,掌握它们在电路设计中的应用和应对策略。
### 设计模式基础概念 **设计模式**是一种在软件工程领域广泛应用的概念,它是指一系列被广泛接受、经过验证的问题解决方案的归纳与总结。通过使用设计模式,开发者能够编写出更易于理解和维护的代码,同时也提高了...