某用户需要使用遥控器(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()
。TakePhoto1
和 TakePhoto2
是具体命令类,实现了 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 拍摄的图片