软件体系结构与设计模式命令模式Word文档格式.docx
《软件体系结构与设计模式命令模式Word文档格式.docx》由会员分享,可在线阅读,更多相关《软件体系结构与设计模式命令模式Word文档格式.docx(12页珍藏版)》请在冰豆网上搜索。
5.系统12
五.程序运行结果15
1.首次运行后的初始界面15
2.点击“打开摄像头”15
3.点击“打开照明灯”16
4.点击“关闭照明灯”16
5.点击“关闭摄像头”17
一.应用场景与案例描述
随着社会经济和科学技术的飞速发展,特别是计算机网络的发展,人们对安全技术防范的要求也越来越高。
然而,现如今快递、外卖行业的迅速发展,各类上门服务为人们带来便捷的同时也伴随着不少隐患。
为了打击各种各样的经济刑事犯罪,保护自身的生命财产安全,采用高科技手段预防和制止各种犯罪将会成为安全防范领域的发展方向。
由此,楼道监控系统应运而生。
计算机系统的应用、普及,网络通讯技术及图像压缩处理技术以及传输技术的快速发展,使得安全技术防范行业能够采用最新的计算机、通讯和图像处理技术,通过计算机网络传输数字图像,可为实现远程图像监控及联网报警系统提供高效可行而且价格低廉的解决方案。
二.案例分析与解决问题
由于楼道监控系统需要在不同的时刻指定执行请求,并需要提供撤销操作(开关功能),因此十分适合使用命令模式。
并且使用命令模式有以下几个优点:
消除耦合、满足“开闭原则”、可以记录日志、能够顺序执行。
实现楼道监控系统的模拟,包括模拟出摄像头监控功能以及楼道照明功能,需要借助javax.swing包提供的组件并使用命令模式的思想加以实现。
将触发事件的组件封装在命令模式的Invoke类中,其关键技术是,让组件使用内部类的实例处理本身的事件,具体来说就是让内部类的实例负责执行命令模式中Invoke类中的excuteCommand()方法,这样一来,组件触发事件后将导致一个具体命令被执行。
三.各个角色描述与UML图示
四.程序完整源代码
1.接收者
Camera类中的on()方法可以打开cameraOpen图片,off()方法可以打开cameraClosed图片,以实现模拟功能,具体代码如下:
Camera.java
packageCorridorMonitor;
importjavax.swing.*;
publicclassCameraextendsJPanel{
Stringname;
IconimageIcon;
JLabellabel;
publicCamera(){
label=newJLabel("
模拟摄像头"
);
add(label);
}
publicvoidon(){
label.setIcon(newImageIcon("
cameraOpen.jpg"
));
publicvoidoff(){
cameraClosed.jpg"
}
Light类中的on()方法可以打开lightOpen图片,off()方法可以打开lightClose图片,以实现模拟功能,具体代码如下:
Light.java
publicclassLightextendsJPanel{
publicLight(){
模拟照明灯"
lightOpen.jpg"
lightClose.jpg"
2.命令接口
命令接口包括excute()和getName()方法,代码如下:
Command.java
publicinterfaceCommand{
publicabstractvoidexecute();
publicabstractStringgetName();
3.具体命令
OnCameraCommand类、OffCameraCommand类、OnLightCommand类以及OffLightCommand类创建了开关照明灯与摄像头的具体命令,代码如下:
OnCameraCommand.java
publicclassOnCameraCommandimplementsCommand{
Cameracamera;
OnCameraCommand(Cameracamera){
this.camera=camera;
publicvoidexecute(){
camera.on();
publicStringgetName(){
return"
打开摄像头"
;
OffCameraCommanf.java
publicclassOffCameraCommandimplementsCommand{
OffCameraCommand(Cameracamera){
camera.off();
关闭摄像头"
OnLightCommand.java
publicclassOnLightCommandimplementsCommand{
Lightlight;
OnLightCommand(Lightlight){
this.light=light;
light.on();
打开照明灯"
OffLightCommand.java
publicclassOffLightCommandimplementsCommand{
OffLightCommand(Lightlight){
light.off();
关闭照明灯"
4.请求者
Invoke类中含有客户程序所需要的按钮,具体代码如下:
Invoke.java
importjava.awt.*;
importjava.awt.event.*;
publicclassInvoke{
JButtonbutton;
Commandcommand;
Invoke(){
button=newJButton();
button.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
executeCommand();
}
});
publicvoidsetCommand(Commandcommand){
mand=command;
button.setText(command.getName());
publicJButtongetButton(){
returnbutton;
privatevoidexecuteCommand(){
command.execute();
5.系统
下列应用程序中,Machine.java使用了命令模式中所涉及的类。
窗体中显示四个独立的按钮,单击不同的按钮,完成特定的操作,以实现楼道监控系统的模拟。
具体代码如下:
Machine.java
publicclassMachineextendsJFrame{
InvokerequestOnCamera,requestOffCamera,requestOnLight,requestOffLight;
Machine(){
setTitle("
楼道监控模拟"
requestOnCamera=newInvoke();
requestOffCamera=newInvoke();
camera=newCamera();
light=newLight();
requestOnCamera.setCommand(newOnCameraCommand(camera));
requestOffCamera.setCommand(newOffCameraCommand(camera));
requestOnLight=newInvoke();
requestOffLight=newInvoke();
requestOnLight.setCommand(newOnLightCommand(light));
requestOffLight.setCommand(newOffLightCommand(light));
initPosition();
setSize(200,300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
privatevoidinitPosition(){
JPanelpSouth=newJPanel();
pSouth.add(requestOnCamera.getButton());
pSouth.add(requestOffCamera.getButton());
pSouth.add(requestOnLight.getButton());
pSouth.add(requestOffLight.getButton());
add(pSouth,BorderLayout.SOUTH);
JPanelpNorth=newJPanel();
pNorth.add(light);
add(pNorth,BorderLayout.NORTH);
JPanelpCenter=newJPanel();
pCenter.setBackground(Color.yellow);
pCenter.add(camera);
add(pCenter,BorderLayout.CENTER);
publicstaticvoidmain(Stringargs[]){
Machinemachine=newMachine();
五.程序运行结果
1.首次运行后的初始界面
2.点击“打开摄像头”
3.点击“打开照明灯”
4.点击“关闭照明灯”
5.点击“关闭摄像头”