简单工厂设计模式

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

核心知识点如下:

(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. pip install lxml出错解决

    初学Python各种版本问题,安装pip install lxml各种出错,解决方法:py -2 -m pip install wheel(PY3上我上个帖子已经标了),http://www.lfd. ...

  2. 自定义shape文件

    1.shape文件 btn_bg.xml文件内容 <?xml version="1.0" encoding="utf-8"?> <shape ...

  3. tomcat项目的部署

    当我们把web项目做好了以后,一般要进行部署,我一般采用两种方式来部署.一种是直接启动tomcat的startup.bat,一种是将tomcat做成服务. 1.第一种方法较为简单,先复制一份tomca ...

  4. 淌水 UE4的shootergame 案例 准备

    从毕业到现在,从GIS到游戏. 先记录一下cesium源码研究停止了一个多月了,还是有点放不下,等有机会一定研究透彻.感谢一下法克鸡丝博主. 好,研究了近两个月的游戏整体制作,熟悉了maya\unfl ...

  5. CSS布局(二)

    本节内容:position.float.clear.浮动布局例子.百分比宽度 position CSS中的position属性设置元素的位置.属性值:static.relative.fixed.abs ...

  6. Slight difference between C++ and C

    In C++, results of assignment operation, prefix increment and prefix decrement are all lvalues, the ...

  7. iOS开发-automaticallyAdjustsScrollViewInsets属性

    iOS开发-automaticallyAdjustsScrollViewInsets属性 Available in iOS 7.0 and later. 简单点说就是automaticallyAdju ...

  8. struts2中如何使用主题theme

    一.什么是主题? 主题就是一种风格化标签,能够让所有UI标签能够产生同样的视觉效果而归集到一起的一组模板,即风格相近的模板被打包为一个主题 二.struts2提供的主题有哪些呢?struts2中如何修 ...

  9. Android软件设计---Dumpsys工具使用

    Android中提供的dumpsys工具,用于分析Android性能.Android系统中,列出所有可用的dumpsys指令. 使用dumpsys查看memory信息: shell@aeon6735m ...

  10. 七个高效的文本编辑习惯(以Vim为例)

    七个高效的文本编辑习惯 如果你花很多时间输入纯文本.写程序或HTML,那么通过高效地使用一个好的编辑器,你可以节省大部分时间.本文将提供指导和提示,让你更迅速地做这些工作,并且少犯错误. 本文用开源文 ...