您的位置:首页 > 其它

设计模式在自动化浅谈

2011-09-25 22:02 162 查看
一、工厂方法模式【Factory Method Pattern】
女娲补天的故事大家都听说过吧,今天不说这个,说女娲创造人的故事,可不是“造人”的工作,这个词被现代人滥用了。这个故事是说,女娲在补了天后,下到凡间一看,哇塞,风景太优美了,天空是湛蓝的,水是清澈的,空气是清新的,太美丽了,然后就待时间长了就有点寂寞了,没有动物,这些看的到都是静态的东西呀,怎么办?
别忘了是神仙呀,没有办不到的事情,于是女娲就架起了八卦炉(技术术语:建立工厂)开始创建人,具体过程是这样的:先是泥巴捏,然后放八卦炉里烤,再扔到地上成长,但是意外总是会产生的:
【备注:RB 人不属此列】
这个过程还是比较有意思的,先看看类图:(之前在论坛上有兄弟建议加类图和源文件,以后的模式都会加上去,之前的会一个一个的补充,目的是让大家看着舒服,看着愉悦,看着就想要,就像是看色情小说一样,目标,目标而已,能不能实现就看大家给我的信心了)



工厂方法模式还有一个非常重要的应用,就是延迟始化(Lazy initialization)。
什么是延迟始化呢?一个对象初始化完毕后就不释放,等到再次用到得就不用再次初始化了,直接从内存过中拿到就可以了
自动化应用:
我们在设计自动化时会用到这种模式,比如我们在创建页面自动化时,对淘宝商城,一淘网,这些有很多共性。这时就需要产生不同的自动化类型。针对自己相应的网站进行操作。
二、观察者模式【Observer Pattern】
目的(Intent):
定义对象间一对多相依关系;使得每当一个对象改变状态则其相关的对象皆得到通知并自动更新。
用到的场所:(自己感觉的
测试用例结果,还有会员得知物品的变化等情况,需要一个变化通知到很多人的时候。我们定义被观察者好基本的添加、删除和状态的改变。定义好观察者的接收改变的信息即可完成一个简单的观察者模式。



自动化应用:
主要是比如我们在建立方法时修改我们的调用方法时,可以使用观察者模式,当监听到有方法发生改变时,我们就可以将改变的方法通知给测试人员用。
三、访问者模式【Visitor Pattern】
Visitor 定义
作用于某个对象群中各个对象的操作. 它可以使你在不改变这些对象本身的情况下,定义作用于这些对象的新操作.在Java 中,Visitor 模式实际上是分离了collection 结构中的元素和对这些元素进行操作的行为.
用到的场所:
比如我们上级领导要查看员工的信息,但是各个级别不同,向我们淘宝有P4—P9和M1—M4.但是马总可能这次看P8,下次看P9的信息,但是他们都有自己大致的属性,姓名,年龄、性别、工资。但是也有不同的事情。业绩,工作的方向。这是我们就需要定义不同Node。然后访问者(Visitor)把这些信息都加进去。马总就可以通过调用visitNode(里面任何的Node)就可以查看信息了。这样就减少if的判断和switch的应用了。



为何使用Visitor?
Java 的Collection(包括Vector 和Hashtable)是我们最经常使用的技术,可是Collection好象是个黑色大染缸,本来有各种鲜明类型特征的对象一旦放入后,再取出时,这些类型就消失了.那么我们势必要用If 来判断,如:
可见使用Visitor 模式是有前提的,在两个接口Visitor 和Visitable 中,确保Visitor 很少变化,变化的是Visitable,这样使用Visitor 最方便.如果Visitor 也经常变化, 也就是说,对象群中的对象类型经常改变,一般建议是,不如在这些对象类中逐个定义操作.但是Java 的Reflect 技术解决了这个问题.
自动化
就好比我们部门提供自动化工具很多,我们可以建立一个统一的访问方法,我们就可以随着开发和研究人员增添不同的访问者。
四、策略着模式【Strategy Pattern】
Strategy 是属于设计模式中 对象行为型模式,主要是定义一系列的算法,把这些算法一个个封装成单独的类.
Stratrgy 应用比较广泛,比如, 公司经营业务变化图, 可能有两种实现方式,一个是线条曲线,一个是框图(bar),这是两种算法,可以使用Strategy 实现.



自动化的应用:
1.自动化的结果需要很多方面,一些数据总是需要以不同的格式来保存文件或者数据;
2.自动化回归中总是希望可以对错误进行截图,但是会用到不同的算法截获图象;
3.在自动化数据分析中,经常需要以不同的格式输出同样数据的图形,比如曲线、框图bar或者柱形图等形状。
五、代理模式Proxy Pattern
什么是代理模式呢?
我很忙,忙的没空理你,那你要找我呢就先找我的代理人吧,那代理人总要知道被代理人能做哪些事情不能做哪些事情吧,那就是两个人具备同一个接口,代理人虽然不能干活,但是被代理的人能干活呀。
比如西门庆找潘金莲,那潘金莲不好意思答复呀,咋办,找那个王婆做代理。王婆里面的函数就是KindWoman里面的函数,只是找了个代理



代理模式主要使用了Java 的多态,干活的是被代理类,代理类主要是接活,你让我干活,好,我交给幕后的类去干,你满意就成,那怎么知道被代理类能不能干呢?同根就成,
大家知根知底,你能做啥,我能做啥都清楚的很,同一个接口呗。
自动化应用
举例两个具体情况:
  (1)自动化回归的时候经常要存储出错的图片,如果随着时间的积累,图片数量越来越多,我们不能将每个图片都在我们的工具中显示出来,所以我们就可以做个图片的proxy
Proxy来代替真正的图片,存放其路径.
  (2)自动化跑回归经常是在晚上,有很对对象在的某个远端服务器上,直接操作这个对象因为网络速度原因可能比较慢,那我们可以先用Proxy来代替那个对象.
  总之原则是,对于开销很大的对象,只有在使用它时才创建,这个原则可以为我们节省很多宝贵的Java内存. 所以,有些人认为Java耗费资源内存,我以为这和程序编制思路也有一定的关系。
六、中介者模式【Mediator Pattern】
Mediator 定义:
用一个中介对象来封装一系列关于对象交互行为.
为何使用Mediator?
各个对象之间的交互操作非常多;每个对象的行为操作都依赖彼此对方,修改一个对象的行为,同时会涉及到修改很多其他对象的行为,如果使用Mediator 模式,可以使各个对象间的耦合松散,只需关心和 Mediator 的关系,使多对多的关系变成了一对多的关系,可以降低系统的复杂性,提高可修改扩展性.
Mediator 模式在事件驱动类应用中比较多,例如界面设计GUI.;聊天,消息传递等,在聊天应用中,需要有一个MessageMediator,专门负责request/reponse 之间任务的调节.



Mediator(中介者):中介者定义一个接口用于与各同事对象通信。
ConcreteMediator(具体中介者):具体中介者通过协调各同事对象实现协作行为。了解并维护它的各个同事。
Colleague Class(中介者类):每一个同事者类都知道他的中介者对象,每一个同事对象在需要与其他的同事者通信的时候,与他的中介者通信。
自我感觉:
类似于中转话机似的,起到中间沟通连线的作用
原文地址:http://qa.taobao.com/?p=13786
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: