无标题文章

http://www.cnblogs.com/yinxiaoqiexuxing/p/5609034.html

简单工厂设计模式

工厂模式就是专门负责将大量有共同接口的类实例化,而且不必事先知道每次是要实例化哪一个类的模式。它定义一个用于创建对象的接口,由子类决定实例化哪一个类。

核心知识点如下:

(1) 大量共同定义的接口。

(2) 由不同的对象去实现该接口。

(3) 子类(具体工厂类)决定实例化哪一个类(具体产品类)有着“一对一”的关系。

前言(也算是工厂的一个应用需求场景吧)

最近在构建自动化测试平台,公司需求是:必须在IE,火狐,Google浏览器下回归测试用例。Selenium的webdriver支持以上浏览器。在返回浏览器WebDriver对象时,刚好和工厂模式设计契合。于是又回顾了一下工厂模式,留下笔记分享给工厂模式学习者和自动化测试平台的构建者,理解不足之处请各位大神不吝赐教。

1,定义WebDriver(这里是为了说明工厂模式,简单的模拟Selenium的webdriver,Selenium的Jar中有此类)

packagefactory;/*** 简单的模拟 WebDriver的几个功能来说明工厂模式问题

* Selenium的Jar中有此类,且方法远远多于此

*@authorAdministrator

**/publicinterfaceWebDriver {//打开页面publicvoidopenURL(String prmUrl);//查找元素publicString findElement(String prmFindTyp);//关闭页面publicvoidclosePage();

}

2,模拟FirefoxDriver

packagefactory;publicclassFirefoxDriverimplementsWebDriver {

@OverridepublicvoidopenURL(String prmUrl) {

System.out.println("火狐浏览器打开URL:" +prmUrl);

}

@OverridepublicString findElement(String prmFindTyp) {

System.out.println("火狐浏览器定位元素方式:" +prmFindTyp);return"画面元素值为:FirefoxDriver";

}

@OverridepublicvoidclosePage() {

System.out.println("火狐浏览器关闭页面");

}

}

3,模拟InternetExplorerDriver

packagefactory;publicclassInternetExplorerDriverimplementsWebDriver {

@OverridepublicvoidopenURL(String prmUrl) {

System.out.println("IE浏览器打开URL:" +prmUrl);

}

@OverridepublicString findElement(String prmFindTyp) {

System.out.println("IE浏览器定位元素方式:" +prmFindTyp);return"画面元素值为:IEDriver";

}

@OverridepublicvoidclosePage() {

System.out.println("IE浏览器关闭页面");

}

}

4,模拟ChromeDriver

packagefactory;publicclassChromeDriverimplementsWebDriver {

@OverridepublicvoidopenURL(String prmUrl) {

System.out.println("谷歌浏览器打开URL:" +prmUrl);

}

@OverridepublicString findElement(String prmFindTyp) {

System.out.println("谷歌浏览器定位元素方式:" +prmFindTyp);return"画面元素值为:ChromeDriver";

}

@OverridepublicvoidclosePage() {

System.out.println("谷歌浏览器关闭页面");

}

}

5,WebDriver实例工厂

packagefactory;publicclassWebDriverFacory {publicstaticWebDriver getBrowserInstance(String browserType){switch(browserType) {case"IE":returnnewInternetExplorerDriver();case"FireFox":returnnewFirefoxDriver();case"Google":returnnewChromeDriver();default:returnnewChromeDriver();

}

}publicstaticWebDriver getBrowserInstance(){returngetBrowserInstance("Google");

}

}

6,测试代码

packagefactory;importorg.junit.Test;publicclassWebDriverFacoryTest {

@TestpublicvoidtestIEDriver() {

WebDriver ied=  WebDriverFacory.getBrowserInstance("IE");

ied.openURL("www.baidu.com");

ied.findElement("Xpath://div/a");

ied.closePage();

}

@TestpublicvoidtestFirefoxDriver() {

WebDriver ied=  WebDriverFacory.getBrowserInstance("FireFox");

ied.openURL("www.baidu.com");

ied.findElement("Xpath://div/a");

ied.closePage();

}

@TestpublicvoidtestChromeDriver() {

WebDriver ied=  WebDriverFacory.getBrowserInstance("Google");

ied.openURL("www.baidu.com");

ied.findElement("Xpath://div/a");

ied.closePage();

}

@TestpublicvoidtestDefaultDriver() {

WebDriver ied=WebDriverFacory.getBrowserInstance();

ied.openURL("www.baidu.com");

ied.findElement("Xpath://div/a");

ied.closePage();

}

}

7,执行结果

IE浏览器打开URL:www.baidu.com

IE浏览器定位元素方式:Xpath://div/aIE浏览器关闭页面

谷歌浏览器打开URL:www.baidu.com

谷歌浏览器定位元素方式:Xpath://div/a谷歌浏览器关闭页面

火狐浏览器打开URL:www.baidu.com

火狐浏览器定位元素方式:Xpath://div/a火狐浏览器关闭页面

谷歌浏览器打开URL:www.baidu.com

谷歌浏览器定位元素方式:Xpath://div/a谷歌浏览器关闭页面

总结:

工厂类负责创建的对象比较少;

客户只知道传入工厂类的参数(如上例子传参浏览器类型),对于如何创建对象(逻辑)不关心;

由于简单工厂很容易违反高内聚责任分配原则,因此一般只在很简单的情况下应用。

你可能感兴趣的:(无标题文章)