计算机软件基础经典例子2

某用户需要使用遥控器(Controller)操控无人机(Drone)实现两个
区域拍照任务(RegionView1、RegionView2)。请使用命令模式(Command)为遥
控器和无人机系统设计软件,并具体回答如下问题。
A:(3 分)请画出命令模式的实例类图,类应包括操作,并标明 invoker 和 receiver。
B:(3 分)若要增加新的拍照任务,RegionView3,请在类图上标注实现方法。
C:(2 分)若要记录已经执行过的拍照任务,并返回上一次任务,请通过代码说
明应如何实现。

语音识别软件一般可分为信号处理,音节识别,词合成,句合成四
个模块。作为软件架构师,请为这四个模块选择不同的连接方式。
A:(3 分)请用管道过滤器架构设计该系统,并画出相应架构图。架构图应清晰
标明系统组件和连接件。
B:(3 分)请用黑板架构设计该系统,并画出相应架构图。
C:(2 分)请分析 B 设计相对于 A 设计的优势。

答案参考ChatGPT Plus版,整理汇总。希望能帮助你解决问题
A:
命令模式的实例类图如下:

            +--------------+
            |   Command    |
            +--------------+
            | + Execute()  |
            +--------------+
                  /\
                  |
          +----------------+
          |                |
    +----------------+  +----------------+
    |  TakePhoto1    |  |  TakePhoto2    |
    +----------------+  +----------------+
    | + Execute()    |  | + Execute()    |
    +----------------+  +----------------+

            +--------------+
            |   Invoker    |
            +--------------+
            | + SetCommand()|
            | + ExecuteCommand() |
            +--------------+

            +--------------+
            |   Receiver   |
            +--------------+
            | + PerformAction() |
            +--------------+

在上述类图中,Command 是抽象命令类,定义了一个执行操作的方法 Execute()TakePhoto1TakePhoto2 是具体命令类,实现了 Command 接口,分别表示两个不同的拍照任务。

Invoker 是调用者类,负责接收和执行命令。它有两个方法:SetCommand() 用于设置命令,ExecuteCommand() 用于执行命令。

Receiver 是接收者类,表示无人机系统。它包含实际执行拍照任务的方法 PerformAction()

B: 如果要增加新的拍照任务 RegionView3,可以在类图中添加一个新的具体命令类 TakePhoto3,它实现了 Command 接口,并提供了执行拍照任务的具体实现。

C: 要记录已经执行过的拍照任务并返回上一次任务,可以在 Invoker 类中增加一个记录执行命令的数据结构,例如使用堆栈(Stack)或列表(List)来存储已执行的命令。在 ExecuteCommand() 方法中,执行完命令后将该命令添加到记录结构中。当需要返回上一次任务时,可以从记录结构中取出最近执行的命令,并执行其相反的操作。

无人机实验平台随笔(六)线程与控制信号传输
可以借鉴下
https://blog.csdn.net/feilongzzz/article/details/124914046

命令模式的实例类图,大致如下吧,自己看着修改下:


+ Command1: AbstractCommand  
| - + execute(): void  
| - + undo(): void  
| - + redo(): void  
| - + getReceiver(): Receiver  
| - + setReceiver(Receiver): void  
+ Command2: AbstractCommand  
| - + execute(): void  
| - + undo(): void  
| - + redo(): void  
| - + getReceiver(): Receiver  
| - + setReceiver(Receiver): void  
+ Invoker:遥控器  
| - + execute(Command): void  
| - + undo(): void  
| - + redo(): void  
| - + getCommand(): Command  
| - + setCommand(Command): void  
+ Receiver: 无人机  
| - + takePicture(): void  
| - + flyTo(double latitude, double longitude): void

语音识别系统一般包括语音输入模块、音节识别模块、 词合成模块、知识库等等

代码示例

class Invoker:
    def __init__(self):
        self._command_stack = []

    def execute(self, command):
        command.execute()
        self._command_stack.append(command)

    def undo(self):
        if self._command_stack:
            command = self._command_stack.pop()
            command.undo()

class Command:
    def execute(self):
        pass

    def undo(self):
        pass

class TakePictureCommand(Command):
    def __init__(self, region_view):
        self._region_view = region_view

    def execute(self):
        self._region_view.take_picture()

    def undo(self):
        self._region_view.delete_last_picture()

region_view1 = RegionView()
region_view2 = RegionView()
region_view3 = RegionView()
controller = Controller()
invoker = Invoker()

command1 = TakePictureCommand(region_view1)
command2 = TakePictureCommand(region_view2)
command3 = TakePictureCommand(region_view3)

# 拍摄 RegionView1 区域的图片
invoker.execute(command1)
# 拍摄 RegionView2 区域的图片
invoker.execute(command2)
# 拍摄 RegionView3 区域的图片
invoker.execute(command3)

# 返回上一次操作
invoker.undo() # 删除 RegionView3 拍摄的图片
invoker.undo() # 删除 RegionView2 拍摄的图片
invoker.undo() # 删除 RegionView1 拍摄的图片