Java中23种面试常考的设计模式之命令模式(Command)---行为型模式

简介: Java中23种面试常考的设计模式之命令模式(Command)---行为型模式

【Java中23种面试常考的设计模式之命令模式(Command)---行为型模式】

知识回顾:
>

之前我们讲过的设计模式在这里呦:
【面试最常见的设计模式之单例模式】
【面试最常见的设计模式之工厂模式】
【Java中23种面试常考的设计模式之备忘录模式(Memento)---行为型模式】
【Java中23种面试常考的设计模式之观察者模式(Observer)---行为型模式】
【Java中23种面试常考的设计模式之模板模式(Template)---行为型模式】
【Java中23种面试常考的设计模式之状态模式(State)---行为型模式】
【Java中23种面试常考的设计模式之策略模式(Strategy)---行为型模式】
【Java中23种面试常考的设计模式之迭代器模式(Iterator)---行为型模式】
【Java中23种面试常考的设计模式之访问者模式(Visitor)---行为型模式】
【Java中23种面试常考的设计模式之中介者模式(Mediator)---行为型模式】
【Java中23种面试常考的设计模式之解释器模式(Interpreter)---行为型模式】
接下来我们要进行学习的是:【Java中23种面试常考的设计模式之命令模式(Command)---行为型模式。

命令模式

命令模式:请求以命令的形式封装在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。将”发出请求的对象”和”接收与执行这些请求的对象”分隔开来。

解决的问题

  1. 请求者与实现者通常是一种紧耦合的关系。这种关系越紧密就影响类之间的关系。所以我们需要降低耦合度。

生产开发中常用的使用场景

  1. 数据库事务机制的底层实现。
  2. 记录命令、命令的撤销与恢复。

命令模式优点与缺点

优点

  1. 降低了系统耦合度。
  2. 可扩展性强。

缺点

  1. 具体命令的实现类过多,不利于维护。

核心角色

Command 声明执行操作的接口,定义一个规则Exexute。
ConcreteCommand 将一个接收者对象绑定于一个动作, 调用接收者相应的操作,以实现Execute规则。
Invoke 要求该命令执行这个请求。
Receiver 知道如何实现与执行一个请求相关的操作。任何类都可能作为一个接收者。
Client--Main 创建一个具体命令对象并设定它的接收者。

UML类图

image.png

实现代码

我们实现这样一个栗子:

Invoke类

package com.command;

public class Invoke {
   
   

    private Command command;   

    public Invoke(Command command) {
   
   
        super();
        this.command = command;
    } 

    public void call(){
   
   
        System.out.println("Invoke要执行一个命令----》");
        command.execute();
    }    
}

Command接口

package com.command;

public interface Command {
   
   
    void execute();
}

ConcreteCommand类

package com.command;

public class ConcreteCommand implements Command {
   
   

    private Receiver receiver;

    public ConcreteCommand(Receiver receiver) {
   
   
        super();
        this.receiver = receiver;
    }

    @Override
    public void execute() {
   
   
        System.out.println("Command中去匹配合适的执行命令---》");
        receiver.receive();
    }
}

Receiver类

package com.command;

public class Receiver {
   
   
    public void receive(){
   
   
        System.out.println("Receiver开始执行相关的操作。。。。。");
    }
}

客户端测试代码Client-Main

package com.command;

public class Main {
   
   
    public static void main(String[] args) {
   
   
        Receiver receiver=new Receiver();
        Command command = new ConcreteCommand(receiver);
        Invoke invoke = new Invoke(command);
        invoke.call();
    }
}

运行结果展示:

image.png

好了,到这里【Java中23种面试常考的设计模式之命令模式(Command)---行为型模式】就结束了,23种设计模式持续更新汇总中。

相关文章
|
5月前
|
存储 Java
【IO面试题 四】、介绍一下Java的序列化与反序列化
Java的序列化与反序列化允许对象通过实现Serializable接口转换成字节序列并存储或传输,之后可以通过ObjectInputStream和ObjectOutputStream的方法将这些字节序列恢复成对象。
|
2月前
|
存储 缓存 算法
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
本文介绍了多线程环境下的几个关键概念,包括时间片、超线程、上下文切换及其影响因素,以及线程调度的两种方式——抢占式调度和协同式调度。文章还讨论了减少上下文切换次数以提高多线程程序效率的方法,如无锁并发编程、使用CAS算法等,并提出了合理的线程数量配置策略,以平衡CPU利用率和线程切换开销。
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
|
2月前
|
存储 算法 Java
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
本文详解自旋锁的概念、优缺点、使用场景及Java实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
|
2月前
|
存储 缓存 Java
大厂面试必看!Java基本数据类型和包装类的那些坑
本文介绍了Java中的基本数据类型和包装类,包括整数类型、浮点数类型、字符类型和布尔类型。详细讲解了每种类型的特性和应用场景,并探讨了包装类的引入原因、装箱与拆箱机制以及缓存机制。最后总结了面试中常见的相关考点,帮助读者更好地理解和应对面试中的问题。
81 4
|
4月前
|
设计模式 Java 关系型数据库
【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码解析
本文是“Java学习路线”专栏的导航文章,目标是为Java初学者和初中高级工程师提供一套完整的Java学习路线。
508 37
|
3月前
|
设计模式 缓存 Java
面试题:谈谈Spring用到了哪些设计模式?
面试题:谈谈Spring用到了哪些设计模式?
|
3月前
|
算法 Java 数据中心
探讨面试常见问题雪花算法、时钟回拨问题,java中优雅的实现方式
【10月更文挑战第2天】在大数据量系统中,分布式ID生成是一个关键问题。为了保证在分布式环境下生成的ID唯一、有序且高效,业界提出了多种解决方案,其中雪花算法(Snowflake Algorithm)是一种广泛应用的分布式ID生成算法。本文将详细介绍雪花算法的原理、实现及其处理时钟回拨问题的方法,并提供Java代码示例。
113 2
|
3月前
|
设计模式 监控 算法
Java设计模式梳理:行为型模式(策略,观察者等)
本文详细介绍了Java设计模式中的行为型模式,包括策略模式、观察者模式、责任链模式、模板方法模式和状态模式。通过具体示例代码,深入浅出地讲解了每种模式的应用场景与实现方式。例如,策略模式通过定义一系列算法让客户端在运行时选择所需算法;观察者模式则让多个观察者对象同时监听某一个主题对象,实现松耦合的消息传递机制。此外,还探讨了这些模式与实际开发中的联系,帮助读者更好地理解和应用设计模式,提升代码质量。
Java设计模式梳理:行为型模式(策略,观察者等)
|
4月前
|
设计模式 安全 算法
【Java面试题汇总】设计模式篇(2023版)
谈谈你对设计模式的理解、七大原则、单例模式、工厂模式、代理模式、模板模式、观察者模式、JDK中用到的设计模式、Spring中用到的设计模式
|
4月前
|
设计模式 存储 算法
Java设计模式-命令模式(16)
Java设计模式-命令模式(16)