1、软件体系结构与设计模式命令模式软件体系结构与设计模式期末大作业 命令模式设计班级:学号:姓名:手机:目录一应用场景与案例描述 3二案例分析与解决问题 3三各个角色描述与UML图示 4四程序完整源代码 51.接收者 52.命令接口 73.具体命令 84.请求者 115.系统 12五程序运行结果 151.首次运行后的初始界面 152.点击“打开摄像头” 153.点击“打开照明灯” 164.点击“关闭照明灯” 165.点击“关闭摄像头” 17一应用场景与案例描述随着社会经济和科学技术的飞速发展,特别是计算机网络的发展,人们对安全技术防范的要求也越来越高。然而,现如今快递、外卖行业的迅速发展,各类上门
2、服务为人们带来便捷的同时也伴随着不少隐患。为了打击各种各样的经济刑事犯罪,保护自身的生命财产安全,采用高科技手段预防和制止各种犯罪将会成为安全防范领域的发展方向。由此,楼道监控系统应运而生。计算机系统的应用、普及,网络通讯技术及图像压缩处理技术以及传输技术的快速发展,使得安全技术防范行业能够采用最新的计算机、通讯和图像处理技术,通过计算机网络传输数字图像,可为实现远程图像监控及联网报警系统提供高效可行而且价格低廉的解决方案。二案例分析与解决问题由于楼道监控系统需要在不同的时刻指定执行请求,并需要提供撤销操作(开关功能),因此十分适合使用命令模式。并且使用命令模式有以下几个优点:消除耦合、满足“
3、开闭原则”、可以记录日志、能够顺序执行。实现楼道监控系统的模拟,包括模拟出摄像头监控功能以及楼道照明功能,需要借助javax.swing包提供的组件并使用命令模式的思想加以实现。将触发事件的组件封装在命令模式的Invoke类中,其关键技术是,让组件使用内部类的实例处理本身的事件,具体来说就是让内部类的实例负责执行命令模式中Invoke类中的excuteCommand()方法,这样一来,组件触发事件后将导致一个具体命令被执行。三各个角色描述与UML图示四程序完整源代码1.接收者Camera类中的on()方法可以打开cameraOpen图片,off()方法可以打开cameraClosed图片,以实
4、现模拟功能,具体代码如下:Camera.javapackage CorridorMonitor;import javax.swing.*;public class Camera extends JPanel String name; Icon imageIcon; JLabel label; public Camera() label=new JLabel(模拟摄像头); add(label); public void on() label.setIcon(new ImageIcon(cameraOpen.jpg); public void off() label.setIcon(new Im
5、ageIcon(cameraClosed.jpg); Light类中的on()方法可以打开lightOpen图片,off()方法可以打开lightClose图片,以实现模拟功能,具体代码如下:Light.javapackage CorridorMonitor;import javax.swing.*;public class Light extends JPanel String name; Icon imageIcon; JLabel label; public Light() label=new JLabel(模拟照明灯); add(label); public void on() lab
6、el.setIcon(new ImageIcon(lightOpen.jpg); public void off() label.setIcon(new ImageIcon(lightClose.jpg); 2.命令接口命令接口包括excute()和getName()方法,代码如下:Command.javapackage CorridorMonitor;public interface Command public abstract void execute(); public abstract String getName();3.具体命令OnCameraCommand类、OffCamera
7、Command类、OnLightCommand类以及OffLightCommand类创建了开关照明灯与摄像头的具体命令,代码如下:OnCameraCommand.javapackage CorridorMonitor;public class OnCameraCommand implements Command Camera camera; OnCameraCommand(Camera camera) this.camera=camera; public void execute() camera.on(); public String getName() return 打开摄像头; OffC
8、ameraCommanf.javapackage CorridorMonitor;public class OffCameraCommand implements Command Camera camera; OffCameraCommand(Camera camera) this.camera=camera; public void execute() camera.off(); public String getName() return 关闭摄像头; OnLightCommand.javapackage CorridorMonitor;public class OnLightComman
9、d implements Command Light light; OnLightCommand(Light light) this.light=light; public void execute() light.on(); public String getName() return 打开照明灯; OffLightCommand.javapackage CorridorMonitor;public class OffLightCommand implements Command Light light; OffLightCommand(Light light) this.light=lig
10、ht; public void execute() light.off(); public String getName() return 关闭照明灯; 4.请求者Invoke类中含有客户程序所需要的按钮,具体代码如下:Invoke.javapackage CorridorMonitor;import java.awt.*;import java.awt.event.*;import javax.swing.*;public class Invoke JButton button; Command command; Invoke() button=new JButton(); button.a
11、ddActionListener(new ActionListener() public void actionPerformed(ActionEvent e) executeCommand(); ); public void setCommand(Command command) mand=command; button.setText(command.getName(); public JButton getButton() return button; private void executeCommand() command.execute(); 5.系统下列应用程序中,Machine
12、.java使用了命令模式中所涉及的类。窗体中显示四个独立的按钮,单击不同的按钮,完成特定的操作,以实现楼道监控系统的模拟。具体代码如下:Machine.javapackage CorridorMonitor;import javax.swing.*;import java.awt.*;import java.awt.event.*;public class Machine extends JFrame Invoke requestOnCamera,requestOffCamera,requestOnLight,requestOffLight; Camera camera; Light ligh
13、t; Machine() setTitle(楼道监控模拟); requestOnCamera=new Invoke(); requestOffCamera=new Invoke(); camera=new Camera(); light=new Light(); requestOnCamera.setCommand(new OnCameraCommand(camera); requestOffCamera.setCommand(new OffCameraCommand(camera); requestOnLight=new Invoke(); requestOffLight=new Invok
14、e(); requestOnLight.setCommand(new OnLightCommand(light); requestOffLight.setCommand(new OffLightCommand(light); initPosition(); setSize(200,300); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); private void initPosition() JPanel pSouth=new JPanel(); pSouth.add(requestOnCamera.getB
15、utton(); pSouth.add(requestOffCamera.getButton(); pSouth.add(requestOnLight.getButton(); pSouth.add(requestOffLight.getButton(); add(pSouth,BorderLayout.SOUTH); JPanel pNorth=new JPanel(); pNorth.add(light); add(pNorth,BorderLayout.NORTH); JPanel pCenter=new JPanel(); pCenter.setBackground(Color.yellow); pCenter.add(camera); add(pCenter,BorderLayout.CENTER); public static void main(String args) Machine machine=new Machine(); 五程序运行结果1.首次运行后的初始界面2.点击“打开摄像头”3.点击“打开照明灯”4.点击“关闭照明灯”5.点击“关闭摄像头”
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1