简单工厂设计模式

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

核心知识点如下:

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

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

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

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

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

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

package factory;

/**
* 简单的模拟 WebDriver的几个功能来说明工厂模式问题
* Selenium的Jar中有此类,且方法远远多于此
* @author Administrator
*
*/
public interface WebDriver { //打开页面
public void openURL(String prmUrl); //查找元素
public String findElement(String prmFindTyp); //关闭页面
public void closePage(); }

2,模拟FirefoxDriver

package factory;

public class FirefoxDriver implements WebDriver {

    @Override
public void openURL(String prmUrl) {
System.out.println("火狐浏览器打开URL:" + prmUrl); } @Override
public String findElement(String prmFindTyp) {
System.out.println("火狐浏览器定位元素方式:" + prmFindTyp);
return "画面元素值为:FirefoxDriver";
} @Override
public void closePage() {
System.out.println("火狐浏览器关闭页面"); }
}

3,模拟InternetExplorerDriver

package factory;

public class InternetExplorerDriver implements WebDriver {

    @Override
public void openURL(String prmUrl) {
System.out.println("IE浏览器打开URL:" + prmUrl); } @Override
public String findElement(String prmFindTyp) {
System.out.println("IE浏览器定位元素方式:" + prmFindTyp);
return "画面元素值为:IEDriver";
} @Override
public void closePage() {
System.out.println("IE浏览器关闭页面"); } }

4,模拟ChromeDriver

package factory;

public class ChromeDriver implements WebDriver {

    @Override
public void openURL(String prmUrl) {
System.out.println("谷歌浏览器打开URL:" + prmUrl); } @Override
public String findElement(String prmFindTyp) {
System.out.println("谷歌浏览器定位元素方式:" + prmFindTyp);
return "画面元素值为:ChromeDriver";
} @Override
public void closePage() {
System.out.println("谷歌浏览器关闭页面"); } }

5,WebDriver实例工厂

package factory;

public class WebDriverFacory {

    public static WebDriver getBrowserInstance(String browserType){

        switch (browserType) {
case "IE":
return new InternetExplorerDriver();
case "FireFox":
return new FirefoxDriver();
case "Google":
return new ChromeDriver();
default:
return new ChromeDriver();
}
}
public static WebDriver getBrowserInstance(){
return getBrowserInstance("Google");
} }

6,测试代码

package factory;

import org.junit.Test;

public class WebDriverFacoryTest {

    @Test
public void testIEDriver() {
WebDriver ied = WebDriverFacory.getBrowserInstance("IE");
ied.openURL("www.baidu.com");
ied.findElement("Xpath://div/a");
ied.closePage();
}
@Test
public void testFirefoxDriver() {
WebDriver ied = WebDriverFacory.getBrowserInstance("FireFox");
ied.openURL("www.baidu.com");
ied.findElement("Xpath://div/a");
ied.closePage();
}
@Test
public void testChromeDriver() {
WebDriver ied = WebDriverFacory.getBrowserInstance("Google");
ied.openURL("www.baidu.com");
ied.findElement("Xpath://div/a");
ied.closePage();
}
@Test
public void testDefaultDriver() {
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/a
IE浏览器关闭页面
谷歌浏览器打开URL:www.baidu.com
谷歌浏览器定位元素方式:Xpath://div/a
谷歌浏览器关闭页面
火狐浏览器打开URL:www.baidu.com
火狐浏览器定位元素方式:Xpath://div/a
火狐浏览器关闭页面
谷歌浏览器打开URL:www.baidu.com
谷歌浏览器定位元素方式:Xpath://div/a
谷歌浏览器关闭页面

总结:

工厂类负责创建的对象比较少;
    客户只知道传入工厂类的参数(如上例子传参浏览器类型),对于如何创建对象(逻辑)不关心;
    由于简单工厂很容易违反高内聚责任分配原则,因此一般只在很简单的情况下应用。

java设计模式--简单工厂模式的更多相关文章

  1. Java设计模式 -- 简单工厂模式(SimpleFactory)

    一.什么是简单工厂模式 简单工厂模式属于类的创建型模式,又叫做静态工厂方法模式.通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类. 二.模式中包含的角色及其职责 1.工厂(C ...

  2. Java设计模式-简单工厂模式(Static Factory Method)

    简单工厂模式(Static Factory Method) 简单工厂模式是类的创建模式,又叫静态工厂方法(Static Factory Method)模式.简单工厂模式是由一个工厂对象决定创建出哪一种 ...

  3. 浅析JAVA设计模式之工厂模式(一)

    1 工厂模式简单介绍 工厂模式的定义:简单地说,用来实例化对象,取代new操作. 工厂模式专门负责将大量有共同接口的类实例化.工作模式能够动态决定将哪一个类实例化.不用先知道每次要实例化哪一个类. 工 ...

  4. java设计模式--简单工厂

    java设计模式--简单工厂 简单工厂不是一个标准的设计模式,但是很常用需要掌握. 在java应用开发中,要"面向接口编程". 1.java中接口的概念: 在java中接口是一种特 ...

  5. Java设计模式之工厂模式(Factory模式)介绍(转载)

    原文见:http://www.jb51.net/article/62068.htm 这篇文章主要介绍了Java设计模式之工厂模式(Factory模式)介绍,本文讲解了为何使用工厂模式.工厂方法.抽象工 ...

  6. Java 设计模式之工厂模式(二)

    原文地址:Java 设计模式之工厂模式(二) 博客地址:http://www.extlight.com 一.背景 本篇内容是 Java 设计模式创建型模式的第二篇.上一篇主题为 <Java 设计 ...

  7. 浅析JAVA设计模式之工厂模式(二)

    1 工厂方法模式简单介绍 工厂方法 (Factroy Method)模式:又称多态性工厂模式(Polymorphic Factory),在这样的模式中,核心工厂不再是一个详细的类.而是一个抽象工厂,提 ...

  8. java设计模式2————工厂模式

    1.工厂模式介绍: 1.1.实现了创建者与调用者的分离 1.2.详细分类: 简单工厂模式 工厂方法模式 抽象工厂模式 1.3.所遵循的OOP原则: 开闭原则:对扩展开放,对修改关闭 依赖倒转原则:面向 ...

  9. 3. 星际争霸之php设计模式--简单工厂模式

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...

随机推荐

  1. HDU1054 Strategic Game——匈牙利算法

    Strategic Game Bob enjoys playing computer games, especially strategic games, but sometimes he canno ...

  2. 又一种XML的解析方法

    [Fact(DisplayName="用户名为空")] public void Should_UsernameEmpty() { var paras = new Dictionar ...

  3. start

    ------siwuxie095 start 启动另一个窗口运行指定的程序或命令 语法: START ["title"] [/D path] [/I] [/MIN] [/MAX] ...

  4. js 日期对象Date以及传参

    创建一个日期对象,日期对象可传参new Date() 创建日期对象getFullYear() 获取年份 getMonth() 获取月份 返回值是 0(一月) 到 11(十二月) 之间的一个整数 get ...

  5. JS Encode and Decode URL

    1.Encode URL String var url = $(location).attr('href'); //get current url //OR var url = 'folder/ind ...

  6. Ueditor1.4.3.3+springMvc+maven 实现图片上传

    前记:由于项目中需要有一个新增数据并且要能支持表格图片上传的功能.使用了ueditor控件.为实现这个功能,从一开始什么都看不懂,到一直连着弄了5天,总算是有了眉目.在此记录一下以便能帮到可以和我一样 ...

  7. myeclipse10的激活

    myeclipse 提醒了我好几天要激活,今天操作了下,出现的问题分享一下. 在激活工具里面没有找到cracker.jar,按照指导双击run.bat,但是打开之后闪一下就自动关闭了,不得其解.然后搜 ...

  8. UIImagePickerControllerDelegate---ActionSheet---获得设备型号

    <pre name="code" class="java">//IOS主要用的是UIImagePickerControllerDelegate这个事 ...

  9. ABAP 动态内表添加单元格颜色字段

    *动态内表alv显示时要求某些单元格显示颜色 *wa_fldcat-datatype不能添加LVC_T_SCOL类型,在创建好内表之后,再添加颜色列. DATA: wa_fldcat TYPE lvc ...

  10. NOIp蒟蒻的爆零记——HA-0132

    考前: 从十一月开始的听课集训,连考六场:考前的最后两天写(da)着(zhe)各种各样的奇(C)葩(S)模板:一周的疯狂,已经过去: 考前的一晚:第二批高二的六个人聚在一起(还有滑稽大师),愉快的玩( ...