一:命令模式的定义
--->命令模式是一个高内聚的模式
--->将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。
--->命令模式的角色
● Receive接收者角色==>该角色就是干活的角色,命令传递到这里是应该被执行的
● Command命令角色==>需要执行的所有命令都在这里声明
● Invoker调用者角色==>接收到命令,并执行命令。
--->命令模式比较简单,但是在项目中非常频繁地使用,因为它的封装性非常好,把请求方(Invoker)和执行方(Receiver)分开了,扩展性也有很好的保障,通用代码比较简单
二:命令模式的应用
【1】 命令模式的优点
● 类间解耦
-->调用者角色与接收者角色之间没有任何依赖关系,调用者实现功能时只需调用Command抽象类的execute方法就可以,不需要了解到底是哪个接收者执行。
● 可扩展性
-->Command的子类可以非常容易地扩展,而调用者Invoker和高层次的模块Client不产生严重的代码耦合。
● 命令模式结合其他模式会更优秀
-->命令模式可以结合责任链模式,实现命令族解析任务;结合模板方法模式,则可以减少Command子类的膨胀问题。
【2】命令模式的缺点
-->命令模式也是有缺点的,请看Command的子类:如果有N个命令,问题就出来了,Command的子类就可不是几个,而是N个,这个类膨胀得非常大,这个就需要读者在项目中慎重考虑使用。
三:命令模式的使用场景
-->只要你认为是命令的地方就可以采用命令模式,例如,在GUI开发中,一个按钮的点击是一个命令,可以采用命令模式;模拟DOS命令的时候,当然也要采用命令模式;触发-反馈机制的处理等
四:最佳实践
--->这确实简化了很多,每个命令完成单一的职责,而不是根据接收者的不同完成不同的职责。
五:案例
【1】命令抽象类
- package com.yeepay.sxf.template10;
-
-
-
-
-
- public abstract class Command {
-
- public abstract void execute();
- }
【2】具体命令类1
- package com.yeepay.sxf.template10;
-
-
-
-
-
-
-
- public class ConcreteComand1 extends Command{
-
- private Receiver receiver;
-
-
- public ConcreteComand1(Receiver receiver) {
- this.receiver=receiver;
- }
-
- @Override
- public void execute() {
- this.receiver.doSomething();
- }
-
- }
【3】具体命令类2
- package com.yeepay.sxf.template10;
-
-
-
-
-
-
-
- public class ConcreteComand2 extends Command {
-
- private Receiver receiver;
-
- public ConcreteComand2(Receiver receiver){
- this.receiver=receiver;
- }
-
- @Override
- public void execute() {
- this.receiver.doSomething();
- }
-
-
- }
【4】接收类(真正的执行者)抽象类
- package com.yeepay.sxf.template10;
-
-
-
-
-
-
-
- public abstract class Receiver {
-
- public abstract void doSomething();
- }
【5】 真正的执行者1
- package com.yeepay.sxf.template10;
-
-
-
-
-
- public class ConcreteReciver1 extends Receiver{
-
- @Override
- public void doSomething() {
- System.out.println("ConcreteReciver1.doSomething()我要登地球");
- }
-
-
- }
【6】真正的执行者2
- package com.yeepay.sxf.template10;
-
-
-
-
-
- public class ConcreteReciver2 extends Receiver {
-
- @Override
- public void doSomething() {
- System.out.println("ConcreteReciver2.doSomething(我要登火星)");
- }
-
- }
【7】调用者
- package com.yeepay.sxf.template10;
-
-
-
-
-
-
- public class Invoker {
-
-
-
- private Command command;
-
-
-
-
- public void setCommand(Command command){
- this.command=command;
- }
-
-
-
- public void action(){
- this.command.execute();
- }
- }
【8】客户端
- package com.yeepay.sxf.template10;
-
-
-
-
-
- public class Client {
-
- public static void main(String[] args) {
-
- Invoker invoker = new Invoker();
-
- Receiver receiver=new ConcreteReciver1();
-
- Command command=new ConcreteComand1(receiver);
-
- invoker.setCommand(command);
-
- invoker.action();
-
- }
- }
原文转载于 http://www.cnblogs.com/shangxiaofei/p/5131610.html
分享到:
相关推荐
《设计模式:可复用面向对象软件的基础》一书介绍了23种经典的设计模式,这些模式大致可以分为三大类: 1. **创建型模式**:专注于对象的创建机制,确保系统在合适的时机创建正确的对象。 - **单例模式**...
设计模式 的分类 总体来说设计模式分为三大类: 创建型模式(5): ...策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
GOF(GoF)23种设计模式,是由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四位大神在他们的著作《设计模式:可复用面向对象软件的基础》中提出的,这些模式分为创建型、结构型和行为型三大类。...
设计模式主要分为三大类: 1.创建型模式:工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式。 2.结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。 4.行为型模式:...
JAVA 设计模式可以分为三种:创建模式、结构模式和行为模式。 1. 创建模式 创建模式是指在创建对象时使用的模式,包括 Factory(工厂模式)、Singleton(单例模式)、Builder(建造者模式)、Prototype(原型模式...
在Java编程中,有23种经典的GoF(Gang of Four)设计模式,它们被分为三大类:创建型、结构型和行为型。本资源集合了这些模式的详细解释与源码分析,旨在帮助开发者深入理解和应用设计模式。 1. 创建型模式...
本资源“Java之23种设计模式解析”源自尚硅谷教育机构,由宋红康老师主讲的“玩转Java”系列课程。这份资料详细介绍了在Java编程中常用的23种设计模式,旨在提升开发者对于软件设计的理解和应用能力,从而写出更加...
在《设计模式》课件中,详细讲解了23种经典的GOF(GoF,Gamma, Helm, Johnson, Vlissides)设计模式,这些模式分为三大类:创建型、结构型和行为型。 1. 创建型设计模式: - 单例模式:确保一个类只有一个实例,并...
本资源包含的是关于Java语言实现的23种经典设计模式的文档,下面将对这些模式进行详细介绍。 1. **单例模式**:确保一个类只有一个实例,并提供全局访问点。在Java中,可以使用双重检查锁定、静态内部类或者枚举来...
《设计模式精解-GoF 23 种设计模式解析附 C++实现源码》是一本深入探讨软件设计模式的书籍,它涵盖了创建型、结构型和行为型三种主要类型的23个经典设计模式,并提供了C++语言的实现代码。设计模式是软件工程中的...
《C# 23种设计模式》是一本深入解析C#编程中常用设计模式的权威指南,对于想要提升代码质量、提高软件可维护性的开发者来说,是不可或缺的参考资料。书中详细介绍了23种经典的设计模式,这些模式是软件工程实践中...
标题提到的“23种面向对象设计模式”涵盖了设计模式的主要分类,这些模式在Java、C++等面向对象编程语言中广泛应用。 1. **创建型模式**(Creational Patterns):这类模式关注对象的创建过程,包括单例模式...
这里我们探讨的“Java之23种设计模式完整代码”是一份宝贵的资源,它包含了所有23种经典设计模式的实现示例。这份资料能够帮助开发者深入理解每种设计模式的概念、应用场景以及它们之间的差异。 设计模式是经过时间...
### Java 23种设计模式之18命令模式详解 #### 模式介绍 命令模式是一种行为设计模式,它把请求封装成一个对象,从而让我们可以用不同的请求对客户端进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作...
这本书详细阐述了23种设计模式,这些模式被广泛应用于各种编程语言,包括C++。 1. **创建型模式**:这类模式主要关注对象的创建过程,它们提供了一种在不指定具体类的情况下创建对象的方法,使得系统更加灵活和可...
设计模式是软件开发中一种广泛采用的实践,它代表了在特定上下文中解决常见问题的通用解决方案。设计模式并非具体的代码或库,而是对最佳实践的描述,它们是经过时间验证、可重用的代码设计模式,旨在提高代码的...
java23种设计模式,每一种模式都有详细的讲解,很全面,如果你想深入了解一下java23种设计模式,这会非常适合你的哦!上传乃为百度云连接,失效请留言。 内容: 001策略模式! N. B8 ~' D! f9 j+ g0 I 002观察者模式 ...
java的设计模式大体上分为三大类: ...行为型模式(11种):策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
GoF(Gang of Four)23种设计模式是软件开发中的经典,由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四位专家在《设计模式:可复用面向对象软件的基础》一书中提出。这些模式为程序员提供了一种通用...
本资源包含三个PPT,分别针对23种Java设计模式进行了分类讲解,对初学者来说是一份宝贵的资料。 首先,23种设计模式按照它们的主要功能可以分为三大类:创建型模式、结构型模式和行为型模式。 1. 创建型模式...