《抽象工厂模式在生成武器装备模型中的应用.pdf》由会员分享,可在线阅读,更多相关《抽象工厂模式在生成武器装备模型中的应用.pdf(5页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、江苏省系统工程学会第十届学术年会抽象工厂模式在生成武器装备模型中的应用白景波,吴卫(解放军理工大学工程兵工程学院。江苏南京2 1 0 0 0 7)摘要:随着面向对象设计技术的日益广泛运用作为可复用技术基础的设计模式也得到了深入研究。抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象:【厂模式可以向客户端提供一个接口,使得客户端在不必指定产品的具体类型的情况下,刨建多个产品族中的产品对象。本文结合C 撑语言,就创建模式中的A b s t r a c tF a c t o r y 模式给出一种生成武器装备模型方法。该方法可以有效地解决仿真武器装备模型建立中代码重用和系统可扩展问
2、题。关键词:抽象工厂,设计模式,武器装备模型0 引言武器装各模型的生成是作战仿真中的一个重要环节,完善、高效的武器模型生成是判断仿真软件开发的重要标志。武器装备模型的生成是繁杂的,对于系统中大量存在很多相似性的武器装备。如果为每辆装备单独创建一个对象,那就必须创建很多对象,会产生很多的代码冗余。造成代码的重用性差,一旦系统的业务逻辑发生变化。比如增加一个新的演习单位。将带来一系列产品的变化,增加一种新研发的装备,客户从表现层到系统的核心逻辑都要变化。因此可扩展性也很差。因此,如何在仿真高效实现武器装备模型的建立,如何控制仿真应用程序的复杂度,如何构建可复用的仿真应用组件,这些都是目前迫切需要解
3、决的问题。在仿真系统的研究中。我们提出这样一种研究思路:将设计模式的思想引入武器装备模型的建立之中,具体解决交互式仿真领域中特定的设计问题。l 抽象工厂模式介绍抽象工厂模式提供一个创建一系列相关或相互依赖的对象的接口,而无须指定具体的类。任何抽象工厂都包含以下四大部分:抽象工厂:为创建对象提供一般接口。具体工厂:抽象工厂的实现。抽象产品:定义了被创建对象的一般接口。具体产品:抽象产品的实现,即实际对象。模式结构如图l 所示。图l 抽象工厂模式的U M L 结构图在图1 中,C l i e n t 为客户端,使用A b s t r a c t F a c t o r y 和A b s t r a
4、 c t P r o d u c t 类声明的接口,抽象工厂模式可以使客户端在不必指定具体类型的情况下,创建多个产品族中的对象;A b s t r a c t F a c t o 巧声明一个创建抽象产品对象的操作接C I C o n c r e t e F a c t o r y 实现刨建具体产品对象的操作;A b s t r a c t P r o d u c t 为-类产品对象声明一个接口;P r o d u c t 定义一个将被相应的具体工厂创建的产品对象实现A b s t r a c t P r o d u c t5 3 9江苏省系统工程学会第十届学术年会的接口。在图l 中,带箭头实线
5、表示调用,虚线表示创建,带空心三角型箭头的实线表示继承。抽象的工厂模式具有很多优点:(1)分离具体的类:客户端只需要通过抽象工厂提供的统一接口,就可以获得所需的产品实例,甚至连具体产品的类名也在具体工厂的实现中被分离出来了,而不会出现在客户端代码中。(2)易于交换产品序列:一个具体的工厂类在一个应用中仅出现一次,即在它初始化的时候,这使得更换一个工厂的时候变得很容易。它只需改变具体的工厂即可使用不同的产品配置。(3)有利于产品的一致性:当一个系列中产品对象被设计成一起工作时,一个应用一次只能使用同一个系列中的对象。2 抽象工厂的使用在仿真中,考虑一个由不同参演部队和类型的仿真成员组成的仿真系统
6、,如参演的红军蓝军,每个单位都包含飞机、坦克、卡车等仿真成员,它们在公共的环境中移动和作用。仿真成员必须能够为一些其他仿真成员定期地提供它的当前状态(如位置、速度),例如,不同一个飞机可能对所有坦克的位置感兴趣,这些信息在请求下被发送,按照给定的频率,时时更新数据。一段时间以后,仿真成员的兴趣可能发生改变。例如,先前的飞机可能对坦克的位置不感兴趣了,而对卡车的位置信息发生了兴趣。在仿真成员的数量随时可能发生变化的同时,仿真系统中武器装备的样式也会因为假想敌的不同而不同。分析上述系统特点,我们不难得出四点结论:(1)系统中可能包含大量的仿真成员,每个仿真成员都可能与别的仿真成员发生联系:(2)仿
7、真成员之间的数据交互可能是巨大的和频繁的;(3)仿真成员的数目和仿真成员之间的通信路径可能也在不断地发生变化,这是因为一个成员可能放弃它先前感兴趣的成员的状态,或者一个成员可能已经离开了系统,或者一个新的成员已经加入了系统。(4)一支参演部队的改变可能会早成所有武器装备样式的改变。因此,在这样的一个系统中,设计和实现扩充武器装备的类库满足系统的基本要求是一个核心问题。我们不能采取控制程序与各种武器装备之间直依赖的关系,这会导致客户程序与成员之间有许多连接,大量的相互连接使得系统成为一个不可分割的整体,对系统行为的任何改动都十分困难,成员之间是紧密耦合的关系,大大降低了成员的可复用性和系统的可扩
8、展性和灵活性。【23】我们可以使用抽象工厂模式,使系统武器装备数据的处理不依赖于具体武器装备对象的创建,不同的武器装备以一系列接口的形式提供,对武器装备数据的处理不依赖于具体武器装备实现,只依赖于提供的接口。图2 客户程序的依赖关系当系统中对某些特定武器装备的数据处理发生变化,或者需要添加某种特殊的武器装备时。模式的客户端不受影响。当参演部队发生变化时,我们无须考虑客户端程序,只需在仿真程序中创建一个新的工厂,由新创建的工厂来生产一系列新的武器装备,这样只要在仿真程序局部添加部分代码,而无须变化原有代码。因此,有利于系统的维护和扩展。5 4 0江苏省系统工程学会第十届学术年会3 程序u M L
9、 图及部分代码首先,定义仿真抽象模型,为了便于分析理解我们只创建一个飞机和坦克的模型,每种装备都有诸如开火等_ 系列功能。图3 对抽象工厂及产品定义再定义了接口之后,我们要将抽象的产品实现,图4 中的C h i n e s e P l a n e 与C h i n e s e T a n k 实现 P l a n e与T a n k 接口。请记住,我们将去除所有存在于一个实际工程中的复杂性。请想象一下,如果在一个接口定义里面,有五个或更多属性,十几个或更多的方法,描述了武器装备之间的相互关系,你就会明白为什么我们使用抽象工厂来创建大量相似的复杂对象了。图4 具体武器装备模型和部分功能的简单实现
10、最后,我们需要实现具体的工厂,见图4 的C h i n e s e A r m F a c t o r y。请注意我在实现接口方法时使用了关键字”v i r t u a l”。这样的话,当我们因为一个极小的改变而要实现一个新的C h i n e s e A r m F a c t o r y 时,我们可以就可以通过继承来实现这个转变,而不需要重写整个工厂了。现在我们已经实现了所有的基础,我们将使用个制造方法来通过抽象工厂来生产武器装备。在二个更复杂的情形里,导演(客户程序)可能因为需要面负责所有对象的。注意:导演不是该模式定义的部分,但是它让理解模式更简单。,客户程序c l a s sD i
11、r e c t o rA r m F a c t o r ya r m f a c t o r y;P l a n ep l a n e;T a n kt a n k;p u b l i cD i r e c t o r(A r m F a c t o r ya r m f a c t o r y)江苏省系统工程学会第十届学术年会t h i s a r m f a c t o r y=a r m f a c t o r y;p u b l i cv o i dB u i l d A r m s 0p l a n e=a r m f a c t o r y c r e a t P l a n e
12、 0;t a n k=a r m f a c t o r y c r e a t T a n k 0;p u b l i cv o i dR u n S i m u l a t i o n 0p l a n e f i r e();t a n k d e s t _ o r y 0;)经过T t J 建工厂的头痛后,使用起来却很简单。在仿真程序中创建仿真实际模型,并运行仿真程序,模拟各种武器装备之间的交互。尝试一下:要创建一个C h i n e s e A r m F a c t o r y 0,你只需要:D i r e c t o rd=n e wD i r e c t o r(n e wC
13、 h i n e s e A r m F a c t o r y 0);d B u i l d A r m s 0;d R u n S i m u l a t i o n O;如果有模拟另一个国家飞机的武器装备,只要在已知仿真客户程序情况下创建一个新的实例就可以对它进 亍仿真,从而可以缩短开发周期D i r e c t o rd=n e wD i r e c t o r(n e wA n o t h e r N a t i o n A r m F a c t o r y 0);4 结论本系统除了仿真系统拥有的特点外还有以下几大特点:通用性:本系统对于抽象工厂模式的合理应用,实现了系统的可复用性
14、,从而增强了系统的通用性。经济性:减少了开发成本。可维护性:通过面向对象的设计使代码得到了优化,减少了代码的冗余,为日后的维护提供了有利的条件。在系统的实现过程中,面向对象的设计加上面向对象的语言带来了统一的思维和统一的代码方式。本系统合理地应用设计模式的概念,为本系统将来的扩展奠定了坚实的基础。参考文献【1 E r i c hG a m m a,等设计模式:可复用面向对象软件的基础【M】李英军,等译北京:机械工业出版社,2 0 0 0【2】G A M M AE D e s i g np a t t e r n s:a b s t r a c t i o na n dr e u s eo f
15、o b j e c t-o r i e n t e ds o f t w a r e M R e a d i n g,M a s s:A d d i s 0 I 卜一W e s l e y,19 9 5【3】J A M E SWC T h ed e s i g np a t t e r n s M R e a d i n g。M a s s:A d d i s o r v-W e s l e y 2 0 0 1【4】S t e v e nJ o h nM e t s k e r,C 设计模式严炯译北京:中国电力出版社,2 0 0 5 5 4 2抽象工厂模式在生成武器装备模型中的应用抽象工厂模式在生成武器装备模型中的应用作者:白景波,吴卫作者单位:解放军理工大学工程兵工程学院,江苏南京 210007 本文链接:http:/