Command

2024-07-27

Command(精选三篇)

Command 篇1

近年来,随着信息技术的飞速发展,各企业纷纷组建起自己的信息管理系统。产品入库与售后服务是企业生产的重要环节,同时也是企业管理系统数据的第一手资料来源,所以更应该重视其数据的准确性、有效性及全面性。文中将介绍基于SmartArm2200+μcLinux+QT的手持设备上实现的条码采集系统,本文只讨论上层软件以及实现过程中Observer模式和Command模式的应用。

2 设计模式

设计模式描述了在面向对象软件设计过程中针对特定问题的简洁而优雅的解决方案。

设计模式最重要的思想是“封装变化的概念”。一方面,设计的软件具有一定的灵活性,以适应可能的变化;另一方面,把这种复杂性所带来的软件复杂性进行封装,为外界提供一个简单而又稳定的访问接口。

3 条码采集系统简介

该条码采集系统主要通过扫描传感器扫入条码数据,经过系统的加工,通过通信接口传入上位机。它的主要功能:采集传感器转换后的条码信息并将其显示在LCD显示屏上,用户通过键盘向系统提出自已的要求,条码采集系统通过处理按键消息以及菜单消息以响应用户提出的要求,实现用户与系统之间的交互。本系统以条码信息、地址信息、索引信息,条码类型的组合为基本操作单位(简称条码记录)。本系统主要处理三种类型的条码记录,它们是:无符加信息的条码记录,入库产品条码记录和销售产品条码记录。本系统实现了入库产品与销售产品信息采集与处理功能。条码采集系统共分为五个功能模块,分别为:

1)用户界面显示模块:完成条码信息采集,然后将条码信息显示在界面上。负责用户与系统之间的交互,正确地将信息显示在添加页面、删除页面、修改页面,预览页面。

2)业务逻辑模块:主要完成对条码记录中各个数据单元(条码信息、地址信息、索引信息等)按照预定好的规则进行修改、删除、添加等操作。

3)数据存储模块:将处理过的数据按照预先设定好的格式存储。

4)数据通信模块:以预先制定的通信协义组织、验证通信数据;负责该手持设备与外部设备通过串口稳定而正确地进行通信。

5)条码解析模块:识别条码记录的类型,如果是入库产品条码记录与销售产品条码记录,则根据相应的检验规则判定待检验条码记录的合法性。如果条码记录合法,则按照预先的设定的规则对条码进行解析,提取出有效信息,显示在预览页面上。

4 Observer模式、Command模式在条码采集系统中的应用

4.1 系统设计分析

本系统中存在的两个问题是:

1)当发生业务逻辑动作,条码记录的内容或数量发生变化,而与条码记录的显示页面却不能及时地反映数据的变化。如当新增一条条码记录时,由于修改页面与预览页面没有得到数据变化的消息,因此显示的数据(条码记录数等)便与实际数据不一致了;当我们在删除页面删除最后一条记录,修改页面与预览页面却显示还有一条条码记录;当把一条入库条码记录修改为销售条码记录,但由于预览、删除页面没有得到通知,它们显示未修时的条码记录信息。这必将给企业生产上和管理上带来很大的麻烦,造成不必要的浪费和损失。

2)我们对三种类型的条码记录进行操作,可以用枚举型值来标识三种类型,如0,1,2分别代表无符加信息条码记录、入库产品条码记录和销售产品条码记录,如果我们想让0代表入库产品条码记录,1代表无符加信息条码记录,那么与类型相关的代码均需要修改;如果我们要新增一种条码记录,则要新增类型枚举定义,新类型赋值,新类型判别相关代码;这样命令的发出者与执行者紧密耦合,进行修改时工作量大,容易出错。

为解决以上两个问题,本文只讨论Observer模式、Command模式在用户界面显示模块以及业务逻辑模块中的应用,其结构图如图1所示。

条码采集系统使用MVC(Model-View-Controller)整体框架。模型(Model)(Data类)用于表示数据和业务规则,模型返回的数据是与数据格式无关的,一个模型号能为多个视图提供数据。视图(View)(Page类)是用户看到并与之交互的界面。控制器(Controller)

(My Manager类)接受用户的输入并调用视图去完成用户的需求。当用户按键时,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型去处理请求,然后确定用哪个视图来显示模型处理返回的数据,负责一部分职能。如果某一部分的需求发生变化,只需改动相应的部分即可。可使系统开发工作更加系统化、模块化,更能体现面向对象的设计思想,提高了系统的可扩展性。

4.2 Observer模式在显示模块的应用

Observer模式的意图是:“定义对象间的一种一对多依赖关系,当一个对象状态发生改变时,所有依赖于它的对象都得到通知并被自动更新”[2]。

使用Observer模式,可以使本系统在用户界面和业务逻辑之间划分清晰的界限。Data即为Subject,Page即为Observer,当主体对象中发生更改时,观察者就会观察这种更改,并相应地更新其显示。

下面以AddPage为例子,详细描述了Observer模式在本系统的应用过程。在这个过程中涉及到的类以及类的主要方法如图2所示。

主体(ConcreteData)维护一个类型为vector的容器变量,用来存放观察本主体的观察者,由于容器本身的性质,使得主体可以支持多个观察者,这使得主体有可能向多个观察者通知所发生的状态变化,而不是一个。首先观察者AddPage调用Register方法,将指向ConcreteData的指针作为参数传递,主体将此观察者存储在容器变量中,以便在将来某个时间状态发生变化是通知观察者。当条码记录的某一项发生变化(被修改、删除等),主体通过GetPage方法来检索所有的观察者,主体然后枚举被检索的观察者,并调用NotifyPage方法以通知观察者所发生的状态变化。当观察者(AddPage)不再需要观察主体(ConcreteData)时,观察者(Add Page)调用UnRegister方法以结束观察过程。

另处,观察者与主体均采用面向接口的技术实现,利用这些接口有助于减少观察者和主体这间的耦合关系,使得观察者和主体都可以独立地发生结构上的变化,而使另一方受到较小的影响。这种方法将接口编程模型的优点扩展到本系统中。

4.3 Command模式在业务逻辑模块的应用

Command模式的意图是:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作[3]。每一个命令都是一个操作:请求的一方发出请求要求执行一个操作;接收的一方收到请求,并执行操作。命令模式允许请求的一方和接收的一方独立开来,使得请求的一方不必知道接收请求的一方的接口,更不必知道请求是怎么被接收,以及操作是否被执行、何时被执行,以及是怎么被执行的。

条码采集系统的核心问题是对条码信息进行处理,系统中有修改、添加、删除等数据操作,在业务逻辑模块使用Command模式使该系统层次更加分明,职责更加明确,结构更加清晰,系统更加容易扩展。

下面以AddCom为例子,详细描述了Command模式在本系统的应用过程。在这个过程中涉及到的类以及类的主要方法如图3所示。

请求者(MyManger)维护一个类型为vector的容器变量,用来存放多个请求对象,当用户要进行操作时,使用GetCommand方法得到命令对象(AddCom),然后调用Execute方法。其中Command类作为接口,只有一个统一的方法,不同的命令类对应接口不同的实现。AddCom类即为添加操作对应的类,它是Command类的一个具体的实现,AddCom通过委托实现具体的添加操作。这样,MyManager对于它实际调用的对象AddAction是一无所知的,它只知道当代表添加的键按下的时候就调用AddCom的Execute()方法;AddAction当然更不知道谁在调用它。通过这种方式,我们实现了调用者(MyManager)和接收者(AddCom)的解耦。如果将来我们需要对这个MyManager进行扩展,只需要再添加一个实现了Command接口的对象就可以了,对于MyManager无需做任何修改。然后通过AddCommand方法向请求者所维护的容器变量中添入新的命令对象指针,实现用户添加操作的意图。在请求者(MyManager)与接收者(AddAction)之间增加一个中间层,隔离了请求者与接收者,降低了请求者与接收者之间的耦合度,增强代码的健壮性、可维护性和复用性。

5 结束语

实践证明,将Observer模式和Command模式引入到条码采集系统的设计和实现中,有效提高了软件开发的效率,保证了代码的可重用性和系统的可扩展性,可以满足不断增长的不同用户的不同业务需求。设计模式使软件设计人员能够快速地根据问题找到对应的解决方案。借鉴他人的成功经验,既可以将其应用于整体的软件架构设计,也可应用与软件中某一部分的微体系结构设计。对设计模式的理解和运用需要我们在实践中不断地摸索和总结。

参考文献

[1]Gamma E,Helm R,Champaign U,et al.设计模式——可复用面向对象软件的基础[M].李英军,译.北京:机械工业出版社,2005.

[2]Parikh G.Software Support,Management,and Evolution in the Coming Decade and Beyond Opportunities&Challenges[C]//Proceedings of the 21st IEEE International Conference on Software Maintenance,Washington,D.C.2005.

Command 篇2

本文地址: blog.csdn.net/caroline_wendy/article/details/22663081

测试环境: Ubuntu 12.04 + GNOME Terminal 3.4.1.1

Linux中, 命令主要包含4种: 可执行程序(executable program),shell的内置命令(builtin), shell函数(function), alias命令(别名);

type:显示命令的类型; 格式: type command

which: 显示可执行程序的位置; 格式: which command ; 只能显示函数, 内置命令为空(ubuntu);

help: 显示帮助文章; 格式: help command ; 注: help cd时, 竖线(“|”)代表互斥的选项;

help选项(--help): 显示命令的相关操作及参数; 格式: command --help;

Command 篇3

1. 确认crontab是否安装:

执行 crontab 命令如果报 command not found,就表明没有安装

2. 安装 crontab

安装过程如下

代码如下复制代码

[root@10vps ~]# crontab -e

-bash: crontab: command not found

[root@10vps ~]# yum install -y vixie-cron

Loaded plugins: fastestmirror, security

Determining fastest mirrors

* rpmforge: ftp.riken.jp

base| 3.7 kB00:00

extras| 3.4 kB00:00

rpmforge| 1.9 kB00:00

rpmforge/primary_db| 2.7 MB00:02

updates| 3.4 kB00:00

updates/primary_db| 3.2 MB00:13

Setting up Install Process

Resolving Dependencies

-->Running transaction check

--->Package cronie.x86_64 0:1.4.4-12.el6 will be installed

-->Processing Dependency: dailyjobs for package: cronie-1.4.4-12.el6.x86_64

-->Running transaction check

--->Package cronie-anacron.x86_64 0:1.4.4-12.el6 will be installed

-->Processing Dependency: crontabs for package: cronie-anacron-1.4.4-12.el6.x86_64

-->Running transaction check

--->Package crontabs.noarch 0:1.10-33.el6 will be installed

-->Finished Dependency Resolution

Dependencies Resolved

================================================================================

PackageArchVersionRepositorySize

================================================================================

Installing:

croniex86_641.4.4-12.el6base73 k

Installing for dependencies:

cronie-anacronx86_641.4.4-12.el6base30 k

crontabsnoarch1.10-33.el6base10 k

Transaction Summary

================================================================================

Install3 Package(s)

Total download size: 114 k

Installed size: 220 k

Downloading Packages:

(1/3): cronie-1.4.4-12.el6.x86_64.rpm|73 kB00:00

(2/3): cronie-anacron-1.4.4-12.el6.x86_64.rpm|30 kB00:00

(3/3): crontabs-1.10-33.el6.noarch.rpm|10 kB00:00

--------------------------------------------------------------------------------

Total15 kB/s | 114 kB00:07

Running rpm_check_debug

Running Transaction Test

Transaction Test Succeeded

Running Transaction

Installing : cronie-1.4.4-12.el6.x86_641/3

Installing : crontabs-1.10-33.el6.noarch2/3

Installing : cronie-anacron-1.4.4-12.el6.x86_643/3

Verifying: crontabs-1.10-33.el6.noarch1/3

Verifying: cronie-anacron-1.4.4-12.el6.x86_642/3

Verifying: cronie-1.4.4-12.el6.x86_643/3

Installed:

cronie.x86_64 0:1.4.4-12.el6

Dependency Installed:

cronie-anacron.x86_64 0:1.4.4-12.el6crontabs.noarch 0:1.10-33.el6

Complete!

[root@10vps ~]# crontab -l

no crontab for root

3. 确认是否安装成功:

代码如下复制代码

执行 crontab -l

4. 看是否设置了开机自动启动

代码如下复制代码

chkconfig --list crond

5. 启动crontab

代码如下复制代码

本文来自 360文秘网(www.360wenmi.com),转载请保留网址和出处

【Command】相关文章:

上一篇:正确使用拖拉机离合器下一篇:湿地净化系统

本站热搜

    相关推荐